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的主要内容,如果未能解决你的问题,请参考以下文章
识别 C# Process.Start() 运行的可执行文件的崩溃