C# Process.StartInfo.WorkingDirectry在设置StartInfo.Verb=";“符文”;启动.bat文件(包含cd命令)
背景:我想用C程序调用一个bat文件,它将转到下一个不同的文件夹,然后执行不同的exe 下面是test.bat文件:C# Process.StartInfo.WorkingDirectry在设置StartInfo.Verb=";“符文”;启动.bat文件(包含cd命令),c#,process,C#,Process,背景:我想用C程序调用一个bat文件,它将转到下一个不同的文件夹,然后执行不同的exe 下面是test.bat文件: echo test begin cd test1 setup1.exe cd test2 setup2.exe echo test finished echo off 这是我的C代码: 在这种情况下,无法实现setup1.exe和setup2.exe 但是如果注释行为:proc.StartInfo.Verb=“runas”; 然后,可以调用setup1.exe和setup
echo test begin
cd test1
setup1.exe
cd test2
setup2.exe
echo test finished
echo off
这是我的C代码:
在这种情况下,无法实现setup1.exe和setup2.exe
但是如果注释行为:proc.StartInfo.Verb=“runas”;
然后,可以调用setup1.exe和setup2.exe来运行
这太奇怪了,就像设置proc.StartInfo.Verb=“runas”;WorkingDirectory不工作
在我看来,Verb=“runas”只是为了设置权限让程序以管理员的身份运行,为什么它会使Process.StartInfo.WorkingDirecotry变得毫无用处?这是“出于设计”。尝试以管理员身份运行
cmd.exe
,您将看到您被“移动”到%WINDIR%/system32/
文件夹。因此,如果Verb=“runas”,那么WorkingDirectory将更改为“%WINDIR%/system32/”,并且无法更改它?是的,再次说明:这是“按设计”(操作系统设计)。您不能反对它。@vasily.sib,非常感谢。处理此问题的一种方法是调用某种类型的命令:cmd.exe/c“cd PLACE\u YOUR\u WORKING\u DIR\u HERE&&test.bat”
using (Process proc = new Process())
{
string command = @"c:\users\danvy\Desktop\script\test.bat";
proc.StartInfo.FileName = command;
proc.StartInfo.WorkingDirectory = Path.GetDirectoryName(command);
//run as admin
proc.StartInfo.Verb = "runas";
proc.Start();
while (!proc.HasExited)
{
proc.WaitForExit(1000);
}
}