Process.Startを使用してバッチファイルを実行しようとしています
私は次のコードを使用しています:
Process myProcess = new Process();
myProcess.StartInfo.FileName = "D:\\test.bat";
myProcess.StartInfo.UserName = "user";
var strPass = new SecureString();
for (int i = 0; i < strUserPass.Length; i++)
{
strPass.AppendChar(strUserPass[i]);
}
strPass.MakeReadOnly();
myProcess.StartInfo.Password = strPass;
myProcess.StartInfo.UseShellExecute = false;
myProcess.StartInfo.RedirectStandardInput = true;
myProcess.StartInfo.RedirectStandardOutput = true;
myProcess.StartInfo.RedirectStandardError = true;
myProcess.Start();
ASP.NETMVC3とIIS7.5を使用しています
このコードをローカルコンピューター(Windows 7)で実行すると、完全に機能します。
このコードをサーバー(Windows Server 2008 R2)で実行すると、機能しません。プロセスは開始されますが、バッチファイルは実行されず、プロセスにはStandardOutputまたはStandardErrorがありません。情報が得られず、エラーもありません。
ユーザー名とパスワードを指定しない場合、サーバーで機能します。バッチファイルは私のネットワークサービスアカウントで実行されます。
私は本当に特定のユーザー名でプロセスを実行する必要があります。
なぜそれが機能しないのか知っていますか?
---編集:Microsoftサポートが説明を見つけました
Windows Vista etセッションは分離されているため、サービスとユーザーアプリケーションは異なるセッションで実行されます。
Windowsでは、セッションから他の資格情報を持つ別のセッションへのプロセスを実行することはできません。プロセスは、セッションのデフォルトのクレデンシャル(AppPoolクレデンシャル)を使用して実行されます。