我通过创建IIS启动器(控制台应用程序)解决了我的问题。我将一些参数传递给这个应用程序,它启动IISExpress,然后终止。现在,在我的WPF应用程序中,我不是为IISExpress创建进程,而是为启动器创建进程。此外,此控制台应用程序还通过退出代码将进程id返回给WPF。
class Program
{
static void Main(string[] args)
{
if (args == null)
Environment.Exit(-1);
string exeIIS = args[0];
string websitePath = args[1];
string port = args[2];
string argsIIS = MakeIISExpressArgs(websitePath, port);
int processID = LaunchIISExpress(argsIIS, exeIIS);
Environment.Exit(processID);
}
private static int LaunchIISExpress(string argsIIS, string pathExeIIS)
{
var process = Process.Start(new ProcessStartInfo()
{
FileName = pathExeIIS,
Arguments = argsIIS,
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true
});
return process.Id;
}
private static string MakeIISExpressArgs(string websitePath, string port)
{
var argsIIS = new StringBuilder();
argsIIS.Append(@"/path:" + websitePath);
argsIIS.Append(@" /Port:" + port);
return argsIIS.ToString();
}
}