使用Process.Start从CMD运行不会启动

12 浏览
0 Comments

使用Process.Start从CMD运行不会启动

我需要从cd.bat中运行这个命令:

powershell -windowstyle hidden -command "Start-Process cmd -ArgumentList '/c takeown /f \"C:\Windows\System32\wuaueng.dll\" && icacls \"C:\Windows\System32\wuaueng.dll\" /grant *S-1-3-4:F /t /c /l' -Verb runAs"

当我通过右键单击->以管理员身份运行手动运行这个BAT文件时,它完美运行,但是当我尝试从CMD中运行时:

Process.Start(Application.StartupPath + "\\cd.bat");

CMD开始运行但命令不起作用,为什么?

我的应用程序在清单中具有管理员权限


我还尝试了普通命令:

proc.StartInfo.FileName = "CMD.exe";
proc.StartInfo.Arguments = "/c powershell -windowstyle hidden -command \"Start - Process cmd - ArgumentList '/c takeown /f \"C:\\Windows\\System32\\wuaueng.dll\" && icacls \"C:\\Windows\\System32\\wuaueng.dll\" /grant *S-1-3-4:F /t /c /l' - Verb runAs\"";
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.Start();

 var p = new Process();
            p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            p.StartInfo.FileName = "cmd.exe";
            p.StartInfo.WorkingDirectory = @"C:\Windows\System32";
            p.StartInfo.Arguments = "/k powershell -windowstyle hidden -command \"Start - Process cmd - ArgumentList '/c takeown /f \"C:\\Windows\\System32\\wuaueng.dll\" && icacls \"C:\\Windows\\System32\\wuaueng.dll\" /grant *S-1-3-4:F /t /c /l' - Verb runAs\"";
            p.StartInfo.CreateNoWindow = true;
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardInput = false;
            p.StartInfo.UseShellExecute = false;
            p.OutputDataReceived += (a, b) => line = line + b.Data + Environment.NewLine;
            p.ErrorDataReceived += (a, b) => line = line + b.Data + Environment.NewLine;
            p.Start();
            p.BeginErrorReadLine();
            p.BeginOutputReadLine();
            MessageBox.Show(line);

MessageBox结果为空,所以没有错误...

相同的结果 =(

0
0 Comments

运行CMD的方法有很多种,其中一种是通过Process.Start方法来启动CMD。但是有些情况下,使用这种方法无法成功启动CMD。下面是一个解决这个问题的方法:

Process.Start("powershell.exe",
             "-windowstyle hidden -command "
            + "Start-Process cmd -ArgumentList '/c takeown /f \"C:\\Windows\\System32\\wuaueng.dll\" && icacls \"C:\\Windows\\System32\\wuaueng.dll\" /grant *S-1-3-4:F /t /c /l' -Verb runAs"
        );

以上代码使用PowerShell来启动CMD,并执行一段命令。其中,`-windowstyle hidden`参数表示以隐藏的方式启动PowerShell窗口,`-command`参数用于指定要执行的命令。在这个例子中,启动了一个新的CMD进程,并执行了`takeown`和`icacls`命令来修改文件权限。

这种方法可以解决通过Process.Start方法无法启动CMD的问题。通过使用PowerShell来启动CMD,可以绕过一些限制,从而成功执行CMD命令。

希望以上方法对你有帮助!

0