我正在尝试使用我的应用程序分发IIS Express.IIS Express将在端口80上提供外部Web请求.
我在运行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();
Run Code Online (Sandbox Code Playgroud)
显然我是以管理员身份运行的.IIS Express显然需要以管理员权限运行才能提供外部请求以及侦听端口80.
我的Windows服务在Windows服务帐户下运行,我认为该帐户具有完全权限,但当我尝试从Windows服务运行时,IIS Express进程正好退出,错误代码为0.
我尝试了很多场景(正如你可以从代码片段中看到的那样),但似乎无法使用我的Windows服务运行IIS Express并隐藏darn控制台窗口.
任何建议将不胜感激.
答案如下: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
});
Run Code Online (Sandbox Code Playgroud)
应该工作,但诀窍是你需要为服务的身份授予ACL,以便它可以取得端口80的所有权.换句话说,在你的安装程序期间(假设你有一个将升级的MSI),让它运行命令行,如:netsh http add urlacl url = http:// WhateverMachineName:80/user = everyone
您可以将"所有人"限制为仅运行服务的特定帐户.当你这样做,那么IIS express应该能够在没有管理员权限的情况下正常启动.
| 归档时间: |
|
| 查看次数: |
14979 次 |
| 最近记录: |