2011-02-08 52 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

相关问题