C# Process.StartInfo.WorkingDirectry在设置StartInfo.Verb=";“符文”;启动.bat文件(包含cd命令)

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

背景:我想用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和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);
    }
}