Сбой консольного приложения после его запуска из ASP.NET Webform - PullRequest
0 голосов
/ 17 декабря 2010

Мне нужно запустить файл консольного приложения (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 долларов в качестве благодарного подарка тому, у кого есть решение!

Спасибо, Тодд

1 Ответ

1 голос
/ 17 декабря 2010

Благодаря Робу Z я смог заставить это работать. Как только я удалил все, кроме следующего, он успешно работал под пользователем сетевой службы. Теперь мне просто нужно запустить его с более защищенным пользователем.

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