Запуск процесса в C # с именем пользователя и паролем создает исключение «Доступ запрещен» - PullRequest
8 голосов
/ 23 сентября 2008

В веб-приложении .NET 3.5, на котором выполняется олицетворение, я пытаюсь выполнить процесс с помощью:

var process = new Process 
             { StartInfo = 
                    { CreateNoWindow = true, 
                      FileName = "someFileName", 
                      Domain = "someDomain", 
                      Username = "someUserName", 
                      Password = securePassword, 
                      UseShellExecute = false
                    }
             };

process.Start();

- Не удалось исправить изменение режима доверия в web.config.

-Помните, что переменная securePassword является строкой secureString, настроенной ранее в коде.

Это вызывает исключение с «Доступ запрещен» в качестве сообщения. Если я удаляю информацию об имени пользователя и пароле, исключение исчезает, но процесс запускается как aspnet_wp вместо пользователя, которому он мне нужен.

Я видел эту проблему на нескольких форумах и никогда не видел решения, предоставленного. Есть идеи?

Ответы [ 6 ]

2 голосов
/ 23 сентября 2008

Вы можете использовать ProcessStartInfo, которая позволяет указывать учетные данные. Хитрость в том, что пароль является безопасной строкой, поэтому вы должны передавать его как байтовый массив.

Код может выглядеть примерно так:

Dim startInfo As New ProcessStartInfo(programName)
        With startInfo
            .Domain = "test.local"
            .WorkingDirectory = My.Application.Info.DirectoryPath
            .UserName = "testuser"
            Dim pwd As New Security.SecureString
            For Each c As Char In "password"
                pwd.AppendChar(c)
            Next
            .Password = pwd

            'If you provide a value for the Password property, the UseShellExecute property must be false, or an InvalidOperationException will be thrown when the Process..::.Start(ProcessStartInfo) method is called. 
            .UseShellExecute = False

            .WindowStyle = ProcessWindowStyle.Hidden
        End With
1 голос
/ 29 сентября 2008

Я пошел по другому пути и поместил все приложение в собственный пул приложений, работающий от имени пользователя, которого мы изначально выдавали за себя. Теперь, когда asp.net создает новый процесс, он запускается в контексте пользователя, а не в aspnet_wp. Не точное решение проблемы, которую я опубликовал, но это сработало для нашей ситуации.

1 голос
/ 24 сентября 2008

Не уверен, что это так, но у меня возникла связанная проблема, и ответ состоял в том, что у учетной записи не было разрешения на олицетворение на компьютере. Это можно изменить, добавив учетную запись в политику «Олицетворять клиента после аутентификации» с помощью локального менеджера политик на компьютере.

0 голосов
/ 23 сентября 2008

Я хотел бы отметить, что я пробовал код на этот сайт включая обновленный код, упомянутый в комментариях. Этот код запускает процесс как олицетворенную идентификацию (что на самом деле все, что мне нужно), но перенаправление стандартной ошибки завершается неудачно - поэтому эта ссылка может быть полезна для тех, кто не имеет отношения к работе с stderr.

0 голосов
/ 23 сентября 2008

Проверьте уровень доступа Code на уровне Процесс требует Full Trust. Возможно, ваше веб-приложение работает в режиме частичного доверия.

Со страницы MSDN процесса:

Разрешения

* LinkDemand
для полного доверия для непосредственного абонента. Этот класс не может использоваться частично доверенным кодом.

* InheritanceDemand
для полного доверия наследникам. Этот класс не может быть унаследован частично доверенным кодом.

0 голосов
/ 23 сентября 2008

Я столкнулся с той же проблемой, что и вы с проектом. должен быть способом порождения процесса из вашего веб-приложения с заданными учетными данными, но на практике это в лучшем случае клудж. В конечном итоге я просто сделал, чтобы приложение передавало информацию в MSMQ, а служба Windows, которая выталкивала элементы очереди, обслуживала запросы.

Даже когда ваше приложение олицетворяет, оно все равно хочет работать под учетной записью пользователя aspnet.

...