【问题标题】:Difference between Process.Start() and Manual StartProcess.Start() 和手动启动之间的区别
【发布时间】:2014-01-28 17:32:31
【问题描述】:

我有一个单一的表单应用程序,它通过计时器连续检查用户状态。我想通过在 Web 应用程序中使用 process.start("C:\inetpub\wwwroot\mywebapp\Checker\checker.exe") 来启动相同的 .exe。执行代码后,exe 出现在系统进程列表中(未出现在 Windows 任务管理器的应用程序列表中),但它什么也不做。它不会更改用户状态,也不会将数据发送到数据库。但是当我双击手动启动相同的 .exe 时,它​​开始工作,并且它也出现在 Windows 任务管理器应用程序列表和进程列表中。 .exe是用C#.Net制作的,是C# windows应用程序的执行文件。

【问题讨论】:

标签: c# asp.net process.start


【解决方案1】:

当由 IIS 启动时,该进程将在启动它的帐户下运行,这将是运行您的 Web 应用程序的 w3wp 进程。因为这不是您的帐户,所以在您选择“显示所有用户的进程”选项之前,它不会显示在任务管理器中。当您通过双击运行它时,它会在您的帐户下运行,因此会可见。

如果更改和数据库访问依赖于使用您的帐户来获得访问权限,那么当它从 IIS 中运行时,这将不起作用。例如,如果您的数据库连接是使用“Windows 身份验证”完成的,那么它将尝试以 IIS 帐户登录,这不太可能起作用。

要解决此问题,您可以通过在 ProcessStartInfo 结构中指定用户名/密码来启动进程。但是,这将要求您将密码嵌入某处,这可能是不可取的。或者查看更改数据库连接字符串,以便明确指定登录凭据。

【讨论】:

  • 你说得对,肖恩,当我在 Visual Studio 调试器中使用以下代码时,它工作正常并启动了 exe 并通过更新数据库等给我响应。但是当我将它部署在 IIS 中并使用要运行代码,它会在进程列表中显示 .exe,但什么也不做。我的意思是 .exe 出现在进程列表中,但它就像一个骰子,即使我更改它的连接字符串等也不做任何事情。当我更改表名或连接字符串时,我应该向我显示一些错误消息。
  • myprocess.StartInfo = new ProcessStartInfo("C:\\inetpub\\wwwroot\\visionweb\\UploadedLogo\\Checker\\OnlineOffline.exe"); myprocess.Start();
  • 作为测试尝试将ProcessStartInfoUsernamePassword 属性设置为您的详细信息并从IIS 运行它。
猜你喜欢
  • 2022-01-25
  • 2013-04-30
  • 1970-01-01
  • 2013-09-11
  • 2015-11-22
  • 1970-01-01
  • 2021-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多