2011-02-08 48 views
10

我試圖將IIS Express與我的應用程序一起分發。 IIS Express將在端口80上提供外部Web請求。如何將IIS Express作爲通過Windows服務啓動的進程運行

我在運行IIS Express以及服務外部請求方面沒有問題,但Microsoft以其無限智慧決定從控制檯窗口以及系統托盤項目運行IIS Express 。您可以通過命令行參數而不是控制檯窗口禁用托盤項目。

我想在不顯示控制檯窗口的情況下運行IIS Express。我也想從Windows服務運行IIS Express。

從我的應用程序中運行下面的代碼不正是我想要的:

Directory.SetCurrentDirectory(string.Format("{0}\\IIS Express", iisProgramDirectory)); 
    process.EnableRaisingEvents = true; 
    //process.Exited += new EventHandler(process_Exited); 
    process.StartInfo.FileName = "iisexpress.exe"; 
    process.StartInfo.Arguments = string.Format("\"/config:{0}webservice\\config\\applicationhost.config\"", dataDirectory); 
    process.StartInfo.UseShellExecute = false; 
    process.StartInfo.RedirectStandardOutput = true; 
    process.StartInfo.RedirectStandardError = true; 
    process.StartInfo.CreateNoWindow = true; 
    process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
    //process.StartInfo.UserName = "Administrator"; 
    //System.Security.SecureString securePwd = new System.Security.SecureString(); 
    //string password = "**********"; 
    //char[] pword = password.ToCharArray(); 
    //for (int i = 0; i < pword.Length; i++) 
    //{ 
    // securePwd.AppendChar(pword[i]); 
    //} 
    //process.StartInfo.Password = securePwd; 
    process.Start(); 

顯然我以管理員身份運行。 IIS Express顯然需要以管理員權限運行以服務於外部請求以及偵聽端口80.

我的Windows服務在Windows服務帳戶下運行,我認爲它具有完全權限,但IIS Express進程只是優雅地退出當我嘗試從Windows服務運行它時,錯誤代碼爲0。

我已經嘗試了很多場景(正如你可以從代碼片斷中看到的那樣),但似乎沒有辦法讓IIS Express運行使用我的Windows服務並隱藏了darn控制檯窗口。

任何建議,將不勝感激。

+1

PS。你能否接受更多的答案,以及你提出的問題。 – 2011-05-23 04:06:45

回答

-1

它不能做,如果你也想使用端口80

0

在iis.net論壇上有類似的問題(運行iisexpress沒有控制檯窗口)。 請看看http://forums.iis.net/p/1175262/1970513.aspx#1970513

+0

感謝您的鏈接和投票。我認爲當隱藏控制檯窗口的時候,更多的人從山麓中爬出來,但是他們又一次只使用批處理文件!我遇到的問題是將它作爲在Windows服務中啓動的進程運行。沒有控制檯窗口,我無法讓它運行。 – David 2011-02-08 20:49:53

+0

大衛..我想你需要檢查「會話0隔離」..根據你的這個評論,我正在考慮它,因爲你試圖從Windows服務內啓動IIS Express ...它將啓動IIS,但那將在會話0 ...檢查,當你運行你的服務去任務管理器 - >進程 - >點擊所有用戶的顯示進程。在那裏你可以看到IIS以你的名字運行,但會話ID爲0 ...即使我正在尋找一個相同的解決方案。如果你得到一個..請讓我也知道 – Gautam 2012-08-13 14:40:54

2

試試這個。我們遇到了同樣的情況,而且工作。這可能會幫助你。

這是IIS Express 7.5,它不需要管理員權限。

string IIS_EXPRESS = @"C:\Program Files\IIS Express\iisexpress.exe"; 

StringBuilder arguments = new StringBuilder(); 
arguments.Append(@"/path:"); 
arguments.Append(@"C:\Inetpub\wwwroot\ClientSyncService"); 
arguments.Append(@" /Port:2000"); 
Process process = Process.Start(new ProcessStartInfo() 
{ 
    FileName = IIS_EXPRESS, 
    Arguments = arguments.ToString(), 
    RedirectStandardOutput = true, 
    UseShellExecute = false, 
    CreateNoWindow = true 
}); 
+0

但是,正如我在我的問題中提到的那樣,感謝您花時間在嘗試使用端口80時不起作用,因爲在端口80上提供外部請求時IIS Express必須以管理員身份運行 – David 2011-02-19 04:26:56

7

像答案: 串IIS_EXPRESS = @ 「C:\ Program Files文件\ IIS快遞\ iisexpress.exe」;

StringBuilder arguments = new StringBuilder(); 
    arguments.Append(@"/path:"); 
    arguments.Append(@"C:\Inetpub\wwwroot\ClientSyncService"); 
    arguments.Append(@" /Port:2000"); 
    Process process = Process.Start(new ProcessStartInfo() 
     { 
      FileName = IIS_EXPRESS, 
      Arguments = arguments.ToString(), 
      RedirectStandardOutput = true, 
      UseShellExecute = false, 
      CreateNoWindow = true 
     }); 

應該工作,但訣竅是,你需要授予該服務的身份訪問控制列表,以便它可以利用80端口 的所有權。換句話說,你的安裝程序中(假設你有一個MSI將運行提升),使它運行一個命令行,如: netsh http add urlacl url = http:// WhateverMachineName:80/user = everyone

您可以在其中限制「everyone」帳戶下你的服務將運行。當你這樣做的時候,那麼IIS express應該可以在沒有管理員權限的情況下正常啓動。

+0

我知道這是一箇舊的線程,但我試圖做同樣的事情,但我無法讓它與在C:\ program files(x86)\ IIS Express中找到的32位iisexpress.exe一起工作。由於某種原因,只有64位iisexpress.exe有效。 – Dan 2015-08-18 16:23:12

3

運行IIS 7.5以管理員身份,只要稍微改變你的代碼:

Process process = Process.Start(new ProcessStartInfo() 
{ 
    FileName = IIS_EXPRESS, 
    Arguments = arguments.ToString(), 
    RedirectStandardOutput = true, 
    UseShellExecute = true, 
    CreateNoWindow = true, 
    Verb = "runas" 
}); 

這也將使你在端口80上運行您的站點。

0

我知道這是一箇舊帖子,但你有沒有考慮過微軟的SRVANY服務包裝?

它作爲Windows服務安裝並運行(在任何憑據下),並在無窗口進程中啓動您的進程。

什麼可以從命令行運行(或者開始/運行窗口),您可以通過SRVANY作爲服務運行:

尼斯寫了在: http://www.tacktech.com/display.cfm?ttid=197