C# - 在与IIS应用程序池用户不同的用户下启动进程

时间:2016-12-08 00:02:59

标签: c# asp.net iis

        public static string StartProcess(string cmd, string args, string workingDirectory, string username, string password)
        {
        // launch system process
        ProcessStartInfo startInfo = new ProcessStartInfo(cmd, args);
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        startInfo.RedirectStandardOutput = true;
        startInfo.RedirectStandardInput = true;
        startInfo.UseShellExecute = false;
        startInfo.CreateNoWindow = true;
        startInfo.UserName = username;
        startInfo.Password = ConvertStringToSecureString(password);

        // get working directory from executable path
        if (String.IsNullOrEmpty(workingDirectory))
        {
            startInfo.WorkingDirectory = Path.GetDirectoryName(cmd);
        }
        else
        {
            startInfo.WorkingDirectory = workingDirectory;
        }
        var results = new StringBuilder();
        using (var process = Process.Start(startInfo))
        {
            process.StandardInput.Flush();
            process.StandardInput.Close();
            var reader = process.StandardOutput;
            string lineOut;
            while ((lineOut = reader.ReadLine()) != null)
            {
                results.AppendLine(lineOut);
            }
            while (!process.HasExited) System.Threading.Thread.Sleep(1000);
        }
        return results.ToString();
        }

我正在尝试使用与IIS应用程序池运行的用户名/密码不同的用户名/密码从我的IIS应用程序中启动进程。

IIS应用程序池在完全管理员用户下运行,当进程启动时,它完成,结果返回,没有问题。当我指定用户名/密码时,流程开始,然后立即关闭。

我也有

Application popup: conhost.exe - Application Error : The application was unable to start correctly (0xc0000142). Click OK to close the application. 

在我的事件日志中。如果我使用上面的代码并将其放入自己的exe文件并使用IIS运行的相同管理员用户通过桌面运行,则该过程启动(使用其他用户的用户名/密码)并完成而没有问题。

它似乎仅限于IIS。我错过了什么吗?

0 个答案:

没有答案