Как запустить внешний exe-файл под определенной учетной записью из веб-службы asp.net? - PullRequest
0 голосов
/ 26 августа 2011

Ниже - мой код из сервиса asp.net, который пытается запустить какой-то внешний exe.Он отлично работает из моей Visual Studio на win 7, но не работает на моем сервере (сервер 2008).Myapp.exe сообщает, что у учетной записи, под которой запущена учетная запись, недостаточно прав.

    List<ProcInfo> allProcesses = new List<ProcInfo>();            
    ProcessStartInfo pInfo = new ProcessStartInfo();
    pInfo.FileName = binPath + @"\myApp.exe";
    pInfo.WindowStyle = ProcessWindowStyle.Hidden;
    pInfo.CreateNoWindow = true;
    pInfo.UseShellExecute = false;
    pInfo.RedirectStandardOutput = true;

    string exitMsg = "";
    int exitCode = 1;
    try
    {
        using (Process proc = Process.Start(pInfo))
        {
            exitMsg = proc.StandardOutput.ReadToEnd();
            proc.WaitForExit(1000);
            exitCode = proc.ExitCode;
        }
    }

Пул ресурсов на сервере работает под учетной записью с достаточными правами доступа, и я также попытался использовать ту же учетную запись в коде, чтобы запустить службу с теми же учетными данными и тем не менее.

Мне сказали, что учетная запись, под которой запускается рабочий поток asp.net, накладывает некоторые дополнительные ограничения.Таким образом, даже если пул ресурсов работает под соответствующей учетной записью, у вас все равно не будет достаточных привилегий.Я также нашел кое-что об использовании вызовов API pInvoke и win32 в качестве единственного способа запуска внешнего кода из службы asp.net.Но у меня нет никаких знаний по win32 api, и я не нашел объяснений этого.

Я был бы очень благодарен за любой совет / пример, как запустить внешний exe-файл под указанной учетной записью из службы asp.net.

1 Ответ

1 голос
/ 26 августа 2011

Если учетная запись, под которой работает рабочий процесс, не имеет достаточных привилегий, у вас есть несколько вариантов.

Вы можете использовать олицетворение в своем коде:

Метод WindowsIdentity.Impersonate

Или настройте IIS для запуска приложения под учетной записью пользователя с необходимыми привилегиями.

Ниже приведена статья, в которой объясняются различные методы защиты от олицетворения:

Понимание безопасности олицетворения ASP.NET

Если вы не уверены, что внедряете код олицетворения пользователя самостоятельно, вот ссылка на статью о проекте кода:

НебольшойКласс C # для выдачи себя за пользователя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...