C# Process.Start 在批处理文件中弄乱了 URI

Posted

技术标签:

【中文标题】C# Process.Start 在批处理文件中弄乱了 URI【英文标题】:C# Process.Start is messing with URI's inside a batch file 【发布时间】:2012-11-28 00:23:22 【问题描述】:

这只是一个简短的问题,我相信有人能够快速回答,因为我很可能只是错过了一些东西。

假设我有以下目录布局

Folder1
  -> CurrentlyRunning.EXE
  -> Folder2
     ProcessToStart.Bat
     ApplicationToStartFromBat.exe

这是应用程序中的代码。

CurrentlyRunning.EXE:

        var proc = new Process
            
                StartInfo =
                    
                        FileName = "Folder2/ProcessToStart.Bat",
                        WindowStyle = ProcessWindowStyle.Hidden,
                        CreateNoWindow = true,
                        UseShellExecute = false
                    
            ;

        proc.Start();

ProcessToStart.Bat:

START ApplicationToStartFromBat.exe

现在,如果我双击运行 ProcessToStart.Bat,它将毫无问题地打开 ApplicationToStartFromBat.exe(这很好)。如果我运行 CurrentRunning.EXE(它将执行我上面发布的代码),BAT 文件会失败,说它找不到我的 EXE(这真的很奇怪)。

如果我将 BAT 文件更改为:

START Folder2/ApplicationToStartFromBat.exe

然后运行CurrentlyRunning.EXE,bat就会正确打开ApplicationToStartFromBat.exe。我的问题是由于某种原因我无法更改 bat 中的代码。

为什么proc.Start()会导致bat文件搜索根目录发生变化,我该如何阻止这种情况发生?

谢谢

【问题讨论】:

【参考方案1】:

我认为这与您的 exe 文件的 working 目录所在的位置有关。

尝试使用ProcessStartInfo.WorkingDirectory 为您的批处理文件设置正确的目录。

var proc = new Process

    StartInfo =
    
        FileName = "Folder2/ProcessToStart.Bat",
        WorkingDirectory = "DirectoryPath";
        WindowStyle = ProcessWindowStyle.Hidden,
        CreateNoWindow = true,
        UseShellExecute = false
    
;
proc.Start();

【讨论】:

以上是关于C# Process.Start 在批处理文件中弄乱了 URI的主要内容,如果未能解决你的问题,请参考以下文章

使用 Process.Start() 访问 ssh

识别 C# Process.Start() 运行的可执行文件的崩溃

C# Process.Start with credentials 失败,拒绝访问

C# Process.Start()方法详解

C# Process.Start()方法详解

C# process.Start 文件名和传递参数