应用程序未从生产Web服务器运行

时间:2011-05-14 21:55:18

标签: c# asp.net process system.diagnostics

我必须从我们的内部网站运行一个工具。用户将从UI提供的输入很少,然后我想使用用户凭据运行该工具。当我从本地机器运行它时,我的代码工作正常,但是当我将它部署到生产服务器并尝试从那里执行它时,它没有启动任何东西。

这是我的代码,我们将非常感谢任何建议。

            System.Diagnostics.ProcessStartInfo PSI = new System.Diagnostics.ProcessStartInfo(@"D:\run.bat");             
            PSI.UserName = "username";
            PSI.Domain = "domain";
            System.Security.SecureString securePwd = new System.Security.SecureString();
            string password = "password";
            foreach (char c in password)
            {
                // Append the character to the password.
                securePwd.AppendChar(c);
            }
            PSI.Password = securePwd;
            PSI.UseShellExecute = false;
            process.StartInfo = PSI;
            PSI.Arguments = SiteId.Text + " " + WebServiceUrl.Text + " " +LogFile.Text;
            process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            process.Start();

2 个答案:

答案 0 :(得分:1)

<强>首先

  • 检查应用程序池的标识(高级设置)。
  • 将身份切换为“system”,并查看批处理文件是否从Web应用程序运行。

如果确实如此:

  • 将身份更改回网络服务
  • 确保您的批处理文件具有应用于用户网络服务(或您选择的任何身份)的执行权限

如果不是:

  • 尝试使用您的代码打开文件,并在最后添加一些无害的文本。
  • 如果可行,您至少可以排除权限和Web应用程序查看能力问题。

答案 1 :(得分:0)

我想关闭此线程,因为我解决了从生产服务器运行应用程序的问题。但我面临着使用特定用户名和运行该应用程序的问题。密码。它始终以apppool中设置的任何标识运行。所以现在如果我只使用这一行它适用于app pool默认身份

Process.Start("notepad");

但如果我使用这行代码,它甚至不会在该服务器中启动记事本

            string password = "XXXXX";
            System.Security.SecureString securePwd = new System.Security.SecureString();
            foreach (char c in password)
            {
                // Append the character to the password.
                securePwd.AppendChar(c);
            }
            Process.Start("notepad", "username", securePwd, "domain");

我将就此问一个单独的问题。感谢所有回复的人。