1

c# プログラムから特定の引数を指定して 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 が起動しないようです。2 つのコマンドを .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): システムは、Windows_SSD_Optimizer_Method_1.Method1 の System.Diagnostics.Process.Start() で System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo) で指定されたファイルを見つけることができません.btn_all_Click(Object sender, EventArgs e) in:line 182/n/nThe system cannot find the file specified/nSystem.ComponentModel.Win32Exception (0x80004005): System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo で指定されたファイルが見つかりませんstartInfo) の System.Diagnostics.Process.Start() at Windows_SSD_Optimizer_Method_1.Method1.btn_all_Click(Object sender, EventArgs e) in:line 182/n/n

http://i.stack.imgur.com/0Em8O.png

4

2 に答える 2

0

Windows 8 x64 では、 File System Redirection に注意する必要があります

32 ビット アプリケーションが 64 ビット OS 上の System32 フォルダーにアクセスする必要がある場合、Windows 8 は、32 ビット プログラムが実際に 32 ビット ファイルを探しているという考えに基づいて、syswow64 へのパスをデフォルトで設定します。

代わりに次のパスを試してください。

@"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();
于 2015-05-19T06:01:56.957 に答える