Разница между Process.Start() и ручным запуском

У меня есть приложение с одной формой, которое постоянно проверяет состояния пользователей с помощью таймера. Я хочу запустить тот же .exe, используя process.start("C:\inetpub\wwwroot\mywebapp\Checker\checker.exe") в веб-приложении. exe появляется в списке системных процессов (не отображается в списке приложений в диспетчере задач Windows) после выполнения кода, но ничего не делает. Он не меняет состояния пользователя и не отправляет данные в базу данных. Но когда я запускаю тот же .exe вручную двойным щелчком, он начинает работать, а также появляется в списке приложений диспетчера задач Windows и в списках процессов. .exe создается с помощью C # .Net и представляет собой исполняемый файл приложения Windows C #.


person ZahidKakar    schedule 28.01.2014    source источник
comment
возможный дубликат .NET Process.Start каталог по умолчанию?   -  person Xavier J    schedule 28.01.2014


Ответы (1)


При запуске IIS процесс будет работать под учетной записью, которая его запустила, что будет w3wp процессами, которые запускают ваше веб-приложение. Поскольку это не ваша учетная запись, она не будет отображаться в диспетчере задач, пока вы не выберете опцию «показывать процессы от всех пользователей». Когда вы запускаете его двойным щелчком, он запускается под вашей учетной записью, поэтому будет виден.

Если изменения и доступ к базе данных основаны на использовании вашей учетной записи для получения доступа, это не будет работать, когда оно запускается из IIS. Например, если ваше подключение к базе данных выполняется с использованием «Аутентификации Windows», то оно попытается войти в систему как учетная запись IIS, что вряд ли сработает.

Чтобы исправить это, вы можете запустить процессы, указав имя пользователя/пароль в структуре ProcessStartInfo. Однако для этого вам потребуется где-то внедрить свой пароль, что может быть нежелательно. В качестве альтернативы попробуйте изменить строку подключения к базе данных, чтобы явно указать учетные данные для входа.

person Sean    schedule 28.01.2014
comment
Вы правы, Шон, когда я использовал приведенный ниже код в отладчике Visual Studio, он отлично работает, запускает exe и дает мне ответ, обновляя базу данных и т. д. Но когда я развернул его в IIS и использовал для запуска кода, он показывает мне .exe в списке процессов, но ничего не делает. Я имею в виду, что .exe появился в списке процессов, но он похож на штамп, ничего не делает, даже если я изменяю его строку подключения и т. Д. Я должен показать мне какое-то сообщение об ошибке, когда я изменяю имя таблицы или строку подключения. - person ZahidKakar; 29.01.2014
comment
myprocess.StartInfo = new ProcessStartInfo(C:\\inetpub\\wwwroot\\visionweb\\UploadedLogo\\Checker\\OnlineOffline.exe); мойпроцесс.Начать(); - person ZahidKakar; 29.01.2014
comment
В качестве теста попробуйте установить свойства Username и Password ProcessStartInfo в соответствии с вашими данными и запустить его из IIS. - person Sean; 29.01.2014