最近在一個項目中用到這樣的需求,需要PDA通過WebService來啟動服務器上的一個exe應用程序,這個exe應用程序是有界面的。當我通過以下代碼來啟動這個exe時,問題出現了。程序並沒有運行,但是在任務管理器里面卻可以看到這個exe的進程。
服務端代碼:
[WebMethod]
public bool Test()
{
try
{
Process ProgStock = new Process();
ProgStock.StartInfo.WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory; //應用程序所在目錄
ProgStock.StartInfo.UseShellExecute = false;
ProgStock.StartInfo.RedirectStandardOutput = true;
ProgStock.StartInfo.CreateNoWindow = true;
ProgStock.StartInfo.FileName = "WindowsFormsServer.exe"; //執行程序完整路徑
ProgStock.StartInfo.Arguments = "1"; //參數
ProgStock.Start();
ProgStock.WaitForExit();
}
catch (Exception ex)
{
throw ex;
}
return true;
}
解決的方法:
在網上了很多方法,一般說aspnet權限不夠,需要模擬administrator用戶來啟動exe,這是其中原因之一,但是僅僅這樣還是不行。我試過了這個方法,雖然模擬administrator,在任務管理器里面這個exe的進程用戶由aspnet變成了administrator,但是界面還是出不來。
幸運的是,終於找到了辦法。
修改“服務”。在“我的電腦”,右鍵“管理” ,選擇“IIS Admin”服務,雙擊,選擇“登錄”,勾選“服務與桌面交互”
模擬Administrator用戶:
在“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG”下面找到machine.config,編輯屬性:
<system.web>
<processModel autoConfig="true" userName="Administrator" password="****"/>
</system.web>
重啟IIS服務就OK了!!