2012-06-01 2 views
1

도움이 필요한 작업은 IIS가 동일한 서버 설치에있는 인트라넷 웹 페이지에서 자체 서버 디스크의 EXE 파일을 실행하는 것입니다. 웹 페이지는 비즈니스 레이어를 사용하여 주어진 매개 변수와 함께 ProcessStart를 실행합니다.IIS AppPool 데스크톱 권한 부여 방법

웹에서 실행을 수행하면 작업 관리자는 응용 프로그램이 웹 페이지의 IIS AppPool로 사용자로 시작한다는 것을 나타냅니다. 몇 초 후에 그것은 죽었습니다. 내 데이터베이스 로그에서 볼 수 있습니다; 맞습니다

The Microsoft Jet database engine cannot open the file '\\computer\pathfile.ext'. It is already opened exclusively by another user, or you need permission to view its data.

. EXE 도구는 차례로 다른 컴퓨터에서 파일을로드합니다. 이것은 데스크톱에서 도구를 사용하는 동안 잘 연구되고 잘 작동하는 특수한 동작입니다.

내 목표/질문

,
나는 데스크탑 권한으로 동작이-웹 함수를 호출합니다. 전혀 가능합니까?

IIS AppPool에는 ApplicationPoolIdentity 계정을 사용하는 일반 설치가 있습니다. < = IIS6 이후로 IIS 7.5 및 Windows Server 2008 R2가 보안 모델을 얼마나 많이 확보했는지에 대한 지식없이 "현명하지 못한"것처럼 보였습니다.

app-pool 사용자를 관리자 인 NetworkService로 변경하려고했습니다.
나는


은 그 때 나는 시작했다 .. 나는 심지어 내 응용 프로그램에 대한 호출을 배치 파일을 실행하는 웹 애플리케이션을 수 있도록 노력/우
을 읽을 간부 등의 응용 프로그램 풀에 응용 프로그램을 설정하려고 ProcessStart 동작을 변경합니다. 그리고 여기, 나는 무엇을해야할지 많이 알지 못합니다. 나는 동사 runas를 추가하려고 노력했다. 강제로 암호 프롬프트가 해결책이 아닙니다. 사용자 이름/비밀번호를 시뮬레이트했습니다. 운이 없다. 나는 또한 데스크탑 명령 창에서/savecred를 사용한 후에 ProcessStart를 매개 변수로 사용하여 runas/user : blabla를 추가하려고 시도했습니다. 운이 없다.

아마도 작동해야하지만 속성의 올바른 설정을 이해하지 못했습니다. 아래에 ProcessStart 코드 스 니펫을 추가하고 내가 시도한 것을 볼 수 있도록 주석이 달린 코드를 추가했습니다.

public string RunProcess(ApplicationType type, int param) 
    { 
     currentSelection = GetApplicationType(type); 

     ProcessStartInfo info = new ProcessStartInfo(currentSelection.Path); 

     info.CreateNoWindow = false; 
     info.UseShellExecute = true; 
     //info.UseShellExecute = false; 
     //info.ErrorDialog = false; 
     //info.UserName = "dummyUsEr"; 
     //info.Password = this.SecurePwd("DummyPWd"); 

     info.WindowStyle = ProcessWindowStyle.Normal; 
     info.Arguments = string.Format(" {0}", param.ToString()); 

     using (Process exec = Process.Start(info)) 
     { 
      try 
      { 
       exec.WaitForExit(); 
      } 
      catch 
      { 
      } 
     } 

     return output; 
    } 

편집

그냥 명확하게하기 위해, 그리고 아마도이 질문에 대한 몇 가지 다른 남자/여자 브라우징을 도와, 내가 암호 세대의 조각을 부착, 내가 볼

protected System.Security.SecureString SecurePwd(string pwd) 
{ 
    SecureString securePwd = new SecureString(); 

    foreach (char ch in pwd.ToCharArray()) 
     securePwd.AppendChar(ch); 

    return securePwd; 
} 
+0

IIS를 서버 관리자로 실행하면 웹 응용 프로그램에서 프로세스를 실행할 수 있지만 '\\ computer \ pathfile.ext'가 다른 프로세스에 의해 잠겨져 오류 메시지가 나타나면 오류가 발생할 수 있습니다 귀하의 프로세스 중. –

+0

@Max, 감사합니다. 하지만 '데이터를 볼 수있는 권한이 필요합니다'라는 다른 부분을 입력하는 것을 잊어 버렸습니다. 나는 또한 반복 할 것이다 - 이것은 잘 연구되고 잘 정립 된 데스크탑 애플리케이션이다. IIS 권한에 대해 잘 이해하지 못하면 전체 IIS를 관리자로 실행하는 것이 현실적으로 불가능합니다. 이 컴퓨터에는 다른 웹 응용 프로그램 및 다른 응용 프로그램 풀이 있습니다. – Independent

+0

시나리오를 증명하기 위해 동일한 비즈니스 로직을 상속받은 단순한 WPF GUI를 배포했습니다. 몇 개의 버튼을 추가하고 콘솔에서 실행합니다. 타다. 이 권리가 IIS 격리에서 제공 될 수 있다면 얼마나 좋을까요? – Independent

답변

0

프로세스 시작 가장에 대한 특정 사용자 이름과 암호를 넣으려고했으나 프로세스가 다른 컴퓨터의 파일에 액세스한다고 가정하고 도메인 이름을 지정하는 것에 대한 언급이없는 것으로 보았습니다. 원격 파일에 액세스 하시겠습니까? 따라서이 같은
:

또한
info.Domain = "domainname"; 
info.UserName = "dummyUsEr"; 
info.Password = "DummyPWd"; 

, this.SecurePwd은() 일을하고 당신이 그것으로 전달하는 단지 바로 암호 문자열로 그것을 시도해야합니까?

+0

감사합니다. 맞습니다. 그 컴퓨터의 특정 도메인이 없기 때문에 도메인을 사용하는 방법에 대해 잘 모르겠습니다. 그들은 C 네트워크 (192.168.2.xx) 만 공유하는 독립형 윈도우 머신입니다. 일부는 Windows XP, Windows 7 등입니다. 'this.SecurePwd()'는 chararray의 특정 변환이 필요하기 때문에 변환기 일뿐입니다. 그렇다면 응용 프로그램이 전혀 시작되지 않으므로 암호는 문제가 아닙니다 (?). – Independent

+0

암호에 문자열을 첨부 할 수 없기 때문에 ProcessStartInfo가 작동하고 작동하는 것에 대해 조금 읽으십시오. – Independent

+0

그래서 지정한 사용자가 오류 메시지에 언급 된 특정 폴더/파일에 대한 액세스 권한을 갖고 있습니까? 해당 파일에 수동으로 액세스하려고하면 로그인 세부 정보를 입력하라는 메시지가 나타납니다. – Nanhydrin

관련 문제