У меня есть приложение с одной формой, которое постоянно проверяет состояния пользователей с помощью таймера. Я хочу запустить тот же .exe, используя process.start("C:\inetpub\wwwroot\mywebapp\Checker\checker.exe") в веб-приложении. exe появляется в списке системных процессов (не отображается в списке приложений в диспетчере задач Windows) после выполнения кода, но ничего не делает. Он не меняет состояния пользователя и не отправляет данные в базу данных. Но когда я запускаю тот же .exe вручную двойным щелчком, он начинает работать, а также появляется в списке приложений диспетчера задач Windows и в списках процессов. .exe создается с помощью C # .Net и представляет собой исполняемый файл приложения Windows C #.
Разница между Process.Start() и ручным запуском
Ответы (1)
При запуске IIS процесс будет работать под учетной записью, которая его запустила, что будет w3wp
процессами, которые запускают ваше веб-приложение. Поскольку это не ваша учетная запись, она не будет отображаться в диспетчере задач, пока вы не выберете опцию «показывать процессы от всех пользователей». Когда вы запускаете его двойным щелчком, он запускается под вашей учетной записью, поэтому будет виден.
Если изменения и доступ к базе данных основаны на использовании вашей учетной записи для получения доступа, это не будет работать, когда оно запускается из IIS. Например, если ваше подключение к базе данных выполняется с использованием «Аутентификации Windows», то оно попытается войти в систему как учетная запись IIS, что вряд ли сработает.
Чтобы исправить это, вы можете запустить процессы, указав имя пользователя/пароль в структуре ProcessStartInfo
. Однако для этого вам потребуется где-то внедрить свой пароль, что может быть нежелательно. В качестве альтернативы попробуйте изменить строку подключения к базе данных, чтобы явно указать учетные данные для входа.
Username
и Password
ProcessStartInfo
в соответствии с вашими данными и запустить его из IIS.
- person Sean; 29.01.2014