我需要从asp.net webforms页面触发Console App(exe)文件。显然主要问题是权限,现在我只是试图通过让asp.net服务模拟主管理员帐户来实现这一点。一旦我能够以稳定的方式工作,我将设置它自己的用户和权限。现在我非常感谢能帮助你实现这个目标。
这就是我所拥有的。
网络表单代码。
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,我可以在服务器上的Process Manager中看到它。但是,该过程仅运行约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 :(得分:1)
感谢Rob Z我能够实现这一点,一旦我删除了除以下内容之外的所有内容,它在网络服务用户下成功运行。现在我只需要用更安全的用户来运行它。
p.StartInfo.UseShellExecute = False
p.StartInfo.FileName = locn & exeName
p.StartInfo.Arguments = GetTaskID
p.Start()