2011-08-25 4 views
0

Bellow는 외부 exe를 실행하려고하는 asp.net 서비스의 코드입니다. 내 Visual Studio에서 win7에서 제대로 작동하지만 내 서버 (server 2008)에서는 실패합니다. Myapp.exe는 runned 아래에 sufficiet 권한이없는 계정을 다시보고합니다. 서버asp.net 웹 서비스에서 특정 계정으로 외부 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; 
     } 
    } 

자원 풀은 충분한 priviliges와 계정에서 실행하고 또한 그 같은 자격 증명 여전히 아무것도 서비스를 시작하는 코드에 동일한 계정을 사용하려고했습니다.

나는 asp.net 작업자 스레드가 실행되는 계정에 몇 가지 추가 제한 사항이 있음을 알았습니다. 따라서 리소스 풀이 적절한 계정에서 실행 되더라도 충분한 권한이없는 것입니다. 또한 asp.net 서비스에서 외부 코드를 실행하는 유일한 방법으로 pInvoke 및 win32 API 호출을 사용하는 방법을 발견했습니다. 그러나 나는 어떤 win32 api 지식도없고 이것의 exples를 찾아 내지 않았다.

asp.net 서비스에서 지정한 계정으로 외부 exe를 실행하는 방법에 대해 매우 감사하게 생각합니다.

답변

1

작업자 프로세스가 실행중인 계정에 충분한 권한이없는 경우 몇 가지 옵션이 있습니다.

WindowsIdentity.Impersonate Method

또는 필요한 권한이있는 사용자 계정으로 응용 프로그램을 실행하도록 IIS를 구성 :

당신은 당신의 코드에서 가장을 사용 할 수 있습니다.

:

Understanding ASP.NET Impersonation Security

당신이 자신을 사용자 가장 코드를 구현 확신하지 않는 경우, 여기 CodeProject의 기사에 대한 링크는 다음과 같습니다

은 가장 보안의 다른 방법을 설명하는 기사입니다

A small C# Class for impersonating a User

+0

마지막 링크에서 코드를 시도했지만 나에게 적합하지 않습니다. 또한 새 창 시스템에서 작동하지 않는 코드에 대한 주석을 발견했습니다. 나는 처음 두 개의 링크를 연구하고 무언가를 조합하려고 노력해야 할 것 같아요. – Primoz

+0

아마도 여기에 문제가 있습니다.
참고 : 가장을 시작한 사용자 컨텍스트 (즉, 전환 한 사용자 컨텍스트가 아님)는 "운영 체제의 일부로 작동"권한 세트가 있어야합니다. – Primoz

+0

작업자 프로세스가 실행중인 계정에 [운영 체제의 일부로 작동] (http://technet.microsoft.com/en-us/library/dd349804 (WS.10) .aspx # BKMK_3)이 있는지 확인하십시오. 사용자 권한. 나는 그것을 서버 2008에서 사용 했으므로 직접 사용해 보았습니다. 편집 .. 그냥 위의 주석을 발견. 이 경우를 확인하십시오. – jdavies

관련 문제