我嘗試從Web應用程序調用.exe文件。 但我想要的是由用戶通過網站的windoes認證進行非個人化調用的文件。使用非個人化從.NET Web應用程序啓動進程
Process process = new Process();
try
{
process.StartInfo.UseShellExecute = false;
process.StartInfo.FileName = ConfigData.PVDToBudgetDBexePath;
process.StartInfo.CreateNoWindow = false;
process.Start();
log.Info("Process started by " + WindowsIdentity.GetCurrent().Name + " with ID: " + process.Id);
process.WaitForExit();
log.Info("After WaitForExit Process ID: " + process.Id);
}
catch (Exception ex)
{
log.Error("Error executing file with message " + ex.Message);
}
這兩個信息日誌文本都被正確記錄。沒有錯誤發生。 但被調用的程序沒有做任何事情。不記錄,不在數據庫中寫入。 用戶擁有該文件的可執行權限。
當我從開發服務器調用相同的代碼時,它工作正常。
我使用.Net 4.5和IIS 7 我發現有關這個主題的帖子只適用於.Net和IIS的非常舊的版本,並不能幫助我。
我在做什麼錯了? 或者我怎樣才能找出發生了什麼問題?
千恩萬謝,
編輯: 爲了更好地解釋清楚我的打算: 我有這個(自制)exe文件,從Excel工作表數據導入數據庫。這需要一些時間。在執行此操作時,它將其進程whith log4net也記錄到數據庫中。 我想用戶可以觸發導入的用戶界面(Web應用程序)。 這個UI上還有一個ajax進度條,它顯示從數據庫中的日誌表導入takten的進度。
我希望此導入過程的最大一個實例在同一時間運行。所以我有一個函數來檢查進程是否仍在運行。 如果是這樣,它不允許啓動另一個進程。如果沒有,你可以重新開始。
private bool IsRunning(string name)
{
Process[] processlist = Process.GetProcesses();
if (Process.GetProcessesByName(name).Length > 0 )
{
return true;
}
else
{
return false;
}
}
謝謝您的回答開始的exe文件。我將閱讀關於消息隊列並試圖理解這是什麼。我在我的問題中添加了一些進一步的解釋,以明確我想要做什麼。如果我知道通過IIS的帳戶試圖啓動exe文件,我可以給它的權利和測試,如果它與帽子帳戶的作品。那會讓我更進一步。或者有什麼方法可以將用戶的憑證提供給流程啓動器? – Ephedra
您是否可以修改執行excell處理的應用程序? –
是的。我自己寫了 – Ephedra