3
Process myProcess = new Process();
ProcessStartInfo remoteAdmin =
            new ProcessStartInfo(Environment.GetFolderPath(Environment.SpecialFolder.System) + @"\iisreset.exe /restart");

remoteAdmin.UserName = username;
remoteAdmin.Password = pwd;
remoteAdmin.Domain = domain;
myProcess.StartInfo = remoteAdmin;
myProcess.StartInfo.UseShellExecute = false;
myProcess.StartInfo.RedirectStandardOutput = true;

myProcess.Start();   --- ERROR HERE

指定されたファイルが見つかりません。

しかし、ローカル マシンで cmd を使用して iisreset を実行しようとすると、動作します。

4

3 に答える 3

4

何か不足していない限り(Environment.GetFolderPath(Environment.SpecialFolder.System)、ローカル マシン (コードが実行されている場所) の特別なフォルダーが返されます。そのため、ファイルC:\Windows\System\iisreset.exeがマシン上にあると想定しています。これを回避するために私が見ることができる唯一の方法は、を削除しC:\、代わりにデバイスの名前を追加して\\DeviceName\C$\からファイルパスを追加することです。これは、特別なフォルダ システムが自分のマシンとリモート マシンの同じ場所にあることを前提としています。

リモート マシンのシステム ディレクトリを取得する他の唯一の方法は、WMI または reg エントリの読み取りを介して取得することです。

したがって、WMI を使用している場合:

"SELECT * FROM Win32_OperatingSystem"

完了したら、そこからフォルダー文字列を自分で作成する必要があります。

于 2011-08-09T08:39:03.513 に答える
2

呼び出されたファイルはありません(それが返されるとC:\Windows\System\iisreset.exe /restart仮定しますEnvironment.GetFolderPath(Environment.SpecialFolder.System)C:\Windows\System\

だからあなたは望むだろう

ProcessStartInfo remoteAdmin = 
     new ProcessStartInfo(Environment.GetFolderPath(Environment.SpecialFolder.System) + "iisreset.exe");
remoteAdmin.Arguments = "/restart";

しかし、Environment.GetFolderPath(Environment.SpecialFolder.System)おそらくC:\Windows\System(末尾のスラッシュがないことに注意してください)のようなものを返し、呼び出されたファイルは間違いなくありませんc:\windows\systemiisreset.exe

だからあなたは実際に欲しいでしょう

ProcessStartInfo remoteAdmin = 
    new ProcessStartInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "iisreset.exe"));
remoteAdmin.Arguments = "/restart";
于 2011-07-14T06:50:58.237 に答える
0

iisreset.exe はリモート呼び出しをサポートしているため、WMI を使用してリモート ディレクトリを取得する代わりに、次のように実行できます。

iisreset {servername}
于 2013-10-07T22:33:10.700 に答える