如何使用c#program中的特定参数启动sysprep.exe?
public void cmdPrint(string[] strcommmand)
{
Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.UseShellExecute = false;
cmd.Start();
cmd.StandardInput.WriteLine("cd c:\\");
foreach (string str in strcommmand)
{
cmd.StandardInput.WriteLine(str);
}
cmd.StandardInput.Flush();
cmd.StandardInput.Close();
writeLine(cmd.StandardOutput.ReadToEnd());
}
我从我的Windows窗体应用程序中调用它,
string[] cmd = { "cd C:\\Windows\\System32\\Sysprep", "sysprep.exe /audit /reboot"};
consoleBox1.cmdPrint(cmd);
但它似乎没有启动sysprep.exe。我将这两个命令粘贴在.bat中并使用
启动它 System.Diagnostics.Process.Start(Application.StartupPath + "\\awesome.bat");
但它也不起作用(打开黑色窗口并立即关闭)
从资源管理器运行bat文件有效,所以我想我在c#应用程序中缺少一些权限。
在我的app.manifest中,
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
是否可以启动sysprep?我的应用程序在普通桌面和审核模式下在Windows 7,8,8.1和10上运行。
编辑:
我尝试了代码而没有完成并关闭cmd,但程序没有响应
var procInfo = new
ProcessStartInfo("C:\\Windows\\System32\\Sysprep\\sysprep.exe");
procInfo.Arguments = "/audit /reboot";
var proc = new Process();
proc.StartInfo = procInfo;
proc.Start(); //Actually executes the process
proc.WaitForExit();
给出错误:
系统无法找到该文件 指定/ nSystem.ComponentModel.Win32Exception(0x80004005):. 系统找不到指定的文件 System.Diagnostics.Process.StartWithShellExecuteEx(的ProcessStartInfo startInfo)在System.Diagnostics.Process.Start()at Windows_SSD_Optimizer_Method_1.Method1.btn_all_Click(对象发送者, EventArgs e)in:第182行/ n / n系统无法找到 文件指定/ nSystem.ComponentModel.Win32Exception(0x80004005):. 系统找不到指定的文件 System.Diagnostics.Process.StartWithShellExecuteEx(的ProcessStartInfo startInfo)在System.Diagnostics.Process.Start()at Windows_SSD_Optimizer_Method_1.Method1.btn_all_Click(对象发送者, EventArgs e)in:第182行/ n / n
答案 0 :(得分:0)
为8岁以上的Windows版本找到了解决方案:
您需要将程序编译为x64二进制文件。如果您将其编译为x86二进制文件,系统会将您重定向到SysWOW64
而不是System32
。
如果您需要与x64和x86兼容,您还可以禁用文件夹重定向:
// Disables folder redirection
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);
// Enables folder redirection
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);
答案 1 :(得分:0)
在Windows 8 x64中,您应该be aware of File System Redirection。
当32位应用程序想要访问a上的System32文件夹时 64位操作系统,Windows 8将默认任何syswow64路径的想法 一个32位程序真的会寻找32位文件。
请尝试使用此路径:
@"c:\windows\sysnative\sysprep\sysprep.exe"
var procInfo = new ProcessStartInfo(@"c:\windows\sysnative\sysprep\sysprep.exe");
procInfo.Arguments = "/audit /reboot";
var proc = new Process();
proc.StartInfo = procInfo;
proc.Start(); //Actually executes the process
proc.WaitForExit();