1

我想使用Process類執行批處理文件。此代碼位於使用LogonUser()和WindowsIdentity.Impersonate()模擬本地PC管理員帳戶的大部分代碼中。System.Diagnostics.Process不接受憑據

我正在嘗試在Process中運行批處理文件,但沒有在ProcessStartInfo中添加憑據,但是這樣做會導致批處理文件無提示失敗 - 沒有發生錯誤,並且批處理文件的預期輸出從未返回(我正在異步閱讀stderr和stdout,fwiw)。

然後我將憑據添加到ProcessStartInfo,但現在如果我不首先調用WindowsImpersonationContext.Undo(),並且出現「登錄失敗:未知用戶名或密碼錯誤」錯誤,現在我得到「Access is denied」錯誤在Process.Start()之前調用.Undo()。我已經三重檢查了多個帳戶的用戶名/密碼/域是否正確。

如果我的代碼沒有LogonUser()或WindowsIdentity.Impersonate()調用(並且ProcessStartInfo中沒有憑據),那麼我沒有遇到批處理文件執行和捕獲批處理文件輸出的問題。

我能夠成功地從桌面運行批處理文件,無論是本地管理員還是任意本地用戶帳戶。我可以看到它的權限表明它應該是可讀/可執行的,我試圖運行它。這真的很有趣,任何幫助表示讚賞。

回答

0

問題是我需要重定向所有3個流;我只是重定向2(出,錯,不在)。這基本上固定的東西。

0

你在找這樣的事嗎?

Process proc = new Process(); 
proc.StartInfo.FileName = @"C:\WINNT\notepad.exe"; 
proc.StartInfo.UseShellExecute = false; 
proc.StartInfo.CreateNoWindow = true; 

proc.StartInfo.Domain = "mydomain.com"; // Domain of IIS Computer 
proc.StartInfo.UserName = "kaung"; //Administrator for that computer 
System.Security.SecureString password = new System.Security.SecureString(); 
password.AppendChar('m'); //Password 
password.AppendChar('y'); 
password.AppendChar('p'); 
password.AppendChar('a'); 
password.AppendChar('s'); 
password.AppendChar('s'); 
password.AppendChar('w'); 
password.AppendChar('o'); 
proc.StartInfo.Password = password; 

proc.Start();