2014-01-28 24 views
0

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

+0

可能重复的[.NET Process.Start默认目录?](http://stackoverflow.com/questions/114928/net-process-start-default-directory) –

回答

0

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

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

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

+0

你是对的肖恩,当我用下面代码在Visual Studio调试器,它工作正常,并启动exe文件,并通过更新数据库等给我的响应。但是,当我在IIS中部署它,并用于运行代码,它显示我在进程列表中的.exe,但什么都不做。我的意思是.exe出现在进程列表中,但它就像死一样,即使我改变它的连接字符串也不做任何事情。当我更改表名或连接字符串时,我应该向我显示一些错误消息。 – ZahidKakar

+0

myprocess.StartInfo = new ProcessStartInfo(“C:\\ inetpub \\ wwwroot \\ visionweb \\ UploadedLogo \\ Checker \\ OnlineOffline.exe”); myprocess.Start(); – ZahidKakar

+0

作为一个测试尝试设置'ProcessStartInfo'的'Username'和'Password'属性为你的细节并从IIS运行它。 – Sean