Мне нужно запустить файл консольного приложения (exe) со страницы веб-форм asp.net. Очевидно, что основной проблемой являются разрешения, и сейчас я просто пытаюсь заставить это работать, позволяя службе 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, который я вижу в диспетчере процессов на сервере. Однако процесс выполняется только около 3 секунд, а затем закрывается.
Журнал событий показывает эту информацию после сбоя / завершения EXE:
Ошибка приложения:
Неисправное приложение BlueLimeConsoleApp.exe, версия 1.0.0.0, отметка времени 0x4d0ba5e2, неисправный модуль KERNEL32.dll, версия 6.0.6001.18000, отметка времени 0x4791a7a6, код исключения 0xc0000142, смещение ошибки 0x00009cac, идентификатор процесса 0x10e8, время запуска приложения 0x0c0e0e0e0e0e0e0e0e0e0e0e0e0e2e0e0e0e0e0e0e1e0e0e0e0e0e1e0e0e0e0e0e0e0e1e с синими кодами.
Системное событие:
Всплывающее окно приложения: 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 долларов в качестве благодарного подарка тому, у кого есть решение!
Спасибо,
Тодд