2010-12-17 67 views
0

我需要从asp.net webforms页面触发控制台应用程序(exe)文件。显然,主要问题是权限,现在我只是试图通过让asp.net服务模拟主管理员帐户来实现这个功能。一旦我能够以稳定的方式工作,我将设置它自己的用户和权限。现在,我真的很感谢帮助这个工作。控制台应用程序从ASP.NET Webform启动后崩溃

这是我的。

Web窗体代码。

Dim p As New Process() 
p.StartInfo.UseShellExecute = False 
p.StartInfo.FileName = locn & exeName 
p.StartInfo.CreateNoWindow = True 
p.StartInfo.Arguments = GetTaskID 
p.StartInfo.UserName = "adminuserid" 
p.StartInfo.Domain = "domain" 
Dim pw As New System.Security.SecureString 
For Each ch As Char In "adminuserpassword" 
    pw.AppendChar(ch) 
Next 
p.StartInfo.Password = pw 
p.StartInfo.WorkingDirectory = "directory" 
p.StartInfo.RedirectStandardError = True 
p.StartInfo.RedirectStandardOutput = True 
p.StartInfo.WindowStyle = Diagnostics.ProcessWindowStyle.Normal 
p.StartInfo.LoadUserProfile = True 
p.Start() 
p.WaitForExit() 

运行从一个按钮单击事件的代码成功发射的EXE,我可以在服务器上的进程管理器中看到。然而,该过程只运行约3秒钟,然后关闭。

事件日志显示该信息后的EXE崩溃/终止:

应用程序错误: 错误应用程序BlueLimeConsoleApp.exe,版本1.0.0.0,时间戳0x4d0ba5e2,错误KERNEL32.DLL模块,版本6.0.6001.18000 ,时间戳0x4791a7a6,异常代码0xc0000142,故障偏移量0x00009cac,进程ID 0x10e8,应用程序启动时间0x01cb9e14d0c53e0c。

系统事件: 应用程序弹出:BlueLimeConsoleApp.exe - 应用程序错误:应用程序无法正确初始化(0xc0000142)。单击确定以终止该应用程序。

因此,似乎我能够启动EXE,但它没有明显的原因崩溃。

在EXE的代码是:

Module Module1 

    Sub Main(ByVal args As String()) 

     For i As Integer = 0 To 10000 
      Console.WriteLine("hello world") 
      System.Threading.Thread.Sleep(1000) 
     Next 

    End Sub 

End Module 

此外,我试图捕捉用于测试目的的StandardError的和StandardOutput消息,并且都返回空值。

此外,EXE可以通过RDC直接在服务器上启动,它运行得很好。

我已经浪费了将近2天的时间,试图让这个工作,并在这一点上,我绝望的一些有经验的投入这项工作。我甚至愿意把50美元作为谢谢你的礼物送给有解决方案的人!

感谢, 托德

+0

此外,从webform启动CMD.exe会生成相同的行为。 – 2010-12-17 19:13:55

+0

您是否试图在本地计算机或运行ASP.NET的服务器上执行此操作? – rjzii 2010-12-17 19:15:08

+0

我正在尝试在我的VPS上运行带有ASP.NET 3.5和IIS7的Windows 2008 Server。我在机器上拥有完整的管理员权限。所有这些在VS2008的本地机器上都能正常工作。 – 2010-12-17 19:17:54

回答

1

感谢Rob Z I能得到这个工作,一旦我删除除了以下的一切,它的网络服务用户下运行成功。现在我只需要用更安全的用户来运行它。

p.StartInfo.UseShellExecute = False 
p.StartInfo.FileName = locn & exeName 
p.StartInfo.Arguments = GetTaskID 
p.Start()