2011-08-05 57 views
3

可執行我有這樣的方法,通過我們的服務器上運行的EXE程序生成許可證:ASP.net C#試圖運行在服務器上

/// <summary> 
/// Generate a new license 
/// </summary> 
public static void GenerateLicense(string Name, string EmailAddress, Licensing.Types.LicenseType Type, Licensing.Types.ProductTypes Product) 
{ 
    string Params = "\"" + Licensing.Types.LicenseTypeToString(Type) + "\" \"" 
     + Licensing.Types.ProductTypeToString(Product) 
     + "\" \"" + Name + "\" \"" 
     + EmailAddress + "\""; 

    // Start license executable and pass in all the params 
    Process.Start(Settings.LicenseExecutableLocation, Params); 

} 

它不拋出任何錯誤,它沒有明顯運行程序(它應該在服務器上製作一些文件)。可執行文件(Settings.LicenseExecutableLocation)的位置是C:\inetpub\wwwroot\licensegen.exe,這是正確的,並且參數也是正確的(我將它們打印出來)。

我正在運行IIS7,它不會拋出任何錯誤,我是否需要更改IIS7中的某些內容?

+0

文件是否完全沒有運行(通過檢查進程管理器進行驗證),還是隻是不輸出文件? –

+0

您使用Server 2008嗎?您是否嘗試過從命令行運行進程? –

+0

誰在調用這個方法?每個Web請求(可能不是)或啓動代碼? –

回答

3

由於啓動過程時沒有發生異常,因此您需要找出實際執行的操作。我想你的最後一行改爲

var pLicenseGenerator = Process.Start(Settings.LicenseExecutableLocation, Params); 

然後等待幾秒鐘的過程中做的事情後,調查調試會話的pLicenseGenerator對象的屬性。這個對象將是Process類,我會特別注意.ExitCode屬性。在設計良好的控制檯應用程序中,如果程序遇到錯誤(如舊的DOS%ERRORLEVEL%變量),它將被設置爲非零值。

如果.ExitCode不起作用,我會推薦將.StandardOutput轉儲到網頁或調試文件。

當我遇到過去的類似問題時,我對格式化進程的輸入參數的方式總是有問題。有時如果參數是一個長文件路徑,則需要特別注意用雙引號括起來的方式。

一個簡單的步驟就是將你傳遞給Process.Start()的確切路徑和參數吐出,然後看看當你從命令行自己運行它們時會發生什麼。如果他們工作的很好,那麼這可能是某種與許可相關的問題,正如另一張海報推測的那樣。

1

您可能會遇到權限問題。可執行文件與Web應用程序駐留在同一個目錄中嗎?如果不是,您可能需要修改權限或使用模擬。如果它駐留在同一個目錄中,則應嘗試使用相對路徑。您可能還需要禁用控制檯對話框 - 我遇到過這個問題。

希望這會有所幫助。

相關問題