0

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

假设我有以下目录布局

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

这是应用程序内部的代码。

当前运行.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 文件搜索根目录发生更改,如何阻止这种情况发生?

谢谢

4

1 回答 1

1

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

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

var proc = new Process
{
    StartInfo =
    {
        FileName = "Folder2/ProcessToStart.Bat",
        WorkingDirectory = "DirectoryPath";
        WindowStyle = ProcessWindowStyle.Hidden,
        CreateNoWindow = true,
        UseShellExecute = false
    }
};
proc.Start();
于 2012-11-28T09:23:04.903 回答