2014-09-28 59 views
2

我試圖使用不同的用戶(而不是服務用戶)從C#服務運行djoin.exe工具和System.Diagnostics.Process不能以不同的用戶身份運行C#進程

該過程返回代碼-1073741502

在事件日誌中我可以看到:

應用程序彈出:djoin.exe - 應用程序錯誤:應用程序 無法正常啓動(0xc0000142)。單擊確定關閉 應用程序。

沒有stderr或stdout。

這裏是我使用的工藝配置:

ProcessStartInfo startInfo = new ProcessStartInfo 
{ 
    Arguments = "/Provision /Domain domain.com /Machine PC12 /SaveFile NUL /printblob", 
    WorkingDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), 
    FileName = "djoin.exe" 
    UseShellExecute = false, 
    RedirectStandardError = true, 
    RedirectStandardInput = true, 
    RedirectStandardOutput = true, 
    CreateNoWindow =true, 
    Domain = "domain.com", 
    UserName = "other-user", 
    Password = "***" 
}; 

if (username!=null) 
{ 
    startInfo.Domain = domain; 
    startInfo.UserName = username; 
    startInfo.Password = ToSecureString(password); 
} 

p = new Process { StartInfo = startInfo }; 
p.Start(); 

當使用RUNAS命令,一切工作正常。

什麼問題?

+0

這是什麼版本的Windows?而且,你的應用程序是否擁有更高的特權 – 2014-09-28 18:40:47

+0

Windows 2008服務器R2。這是一項服務。你是什​​麼意思提升特權? – Igal 2014-09-28 21:44:21

+0

該程序使用的某個DLL的DllMain()入口點返回FALSE。它不高興,你不知道爲什麼,除非它在應用程序事件日誌中留下消息。不好的可能性你會找到一個。你沒有足夠的旋鈕來調整,儘管你絕對應該嘗試將LoadUserProfile設置爲* true *。請聯繫作者或應用程序的所有者以獲取幫助。 – 2014-09-28 23:41:35

回答

0

似乎它是一個權限問題。這可以位於exe文件所在的文件夾級別,也可以位於正在運行該進程的用戶。

要診斷這一點,你可以先到exe文件所在的文件夾。然後右鍵單擊並將權限設置爲完全控制的「所有人」。然後嘗試再次運行,看看你是否得到相同的消息。

另外,當您運行Visual Studio時,在開始時,右鍵單擊並以管理員身份運行。我從你的評論中認爲這個作品行得通,讓我相信它實際上是許可相關的。例如同一個域中的不同用戶?一旦您計算出應用程序所在文件夾的權限,請創建一個具有該文件夾權限的帳戶,然後在該帳戶下執行任何進程計劃/運行exe。

更新 - 上述註釋提示了另一個想法,您可以使用system.diagnostics在代碼的每個位置編寫eventlog條目,以幫助確定發生了什麼問題。如果WinDBG獲取關於拋出異常的更多信息,可能會用到另一個工具。

相關問題