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



我必须从我们的内部网站运行一个工具。用户将从 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();

首先:

  • 检查应用程序池的标识(高级设置)。
  • 将标识切换到"系统",并查看批处理文件是否从 Web 应用运行。

如果是这样:

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

如果没有:

  • 尝试使用代码打开文件,并在末尾附加一些无害的文本。
  • 如果可行,您至少可以排除权限和 Web 应用可查看性问题。

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

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");

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

相关内容

  • 没有找到相关文章

最新更新