CreateProcessAsUser()를 사용하여 스크립트 및 실행 파일을 실행하여 자동화 작업을 처리하는 Thrid Party Windows 서비스를 사용하고 있습니다. Windows Server 2008에서 UAC 및 LUA 권한 상승이 API를 통해 처리되는 방식으로 인해 문제가 발생합니다.비대화 형 서비스 (win32/.net/powershell)에서 UAC 승격 된 프로세스 시작
서비스가 LocalSystem으로 실행되며 "데스크톱과 상호 작용"을 사용할 수 없습니다. 프로세스는 Administrators 그룹의 사용자로 실행되지만 관리자 계정은 실행되지 않습니다 (이는 많은 UAC 제한에서 제외됩니다). 모든 UAC 기본 설정이 그대로 유지됩니다.
서비스에 임의의 명령이나 powershell 코드를 전달할 수는 있지만 서비스에 의해 시작되는 비 상승, 비 대화식 프로세스의 '탈주'가 불가능합니다.
상승 된 프로세스를 시작하기위한 유일한 (공개) API 옵션이 'runas'동사가 포함 된 ShellExecute()이지만 그 호출이 불가능하다는 것을 알 수있는 것 같습니다. 비 대화식 서비스이거나 "이 작업에는 대화식 창 스테이션이 필요합니다"와 같은 오류가 발생합니다.
내가 찾은 유일한 해결 방법은 여기에 언급되어 http://www.eggheadcafe.com/software/aspnet/29620442/how-to-proper-use-sendinp.aspx
는 .NET/PowerShell을 코드에서이 작업을 수행하려면, 그것은 본다 "winsta0 \ default"로 설정할 수있는 lpDesktop과 동일합니다. LocalSystem에 CreateProcessAsUser 또는 CreateProcessWithLogonW를 호출 할 권한이 있는지 여부는 확실하지 않습니다.비스타에서 공식이 과정을 높일 수있는 방법 에만 쉘 API에서 ShellExecute (예)를 사용하고 문서화 (하지 CreateProcess를 또는 CreateProcessAsUser). 따라서 응용 프로그램에서 ShellExecute (Ex)를 호출하여 도우미 을 시작하여 SendInput을 호출해야합니다. 은 또한, 세션 0 분리 인해 서비스 만 대화 형 데스크톱을 지정 ( 에서 ShellExecute (예)를 사용할 수 없습니다) 에 CreateProcessAsUser 또는 CreateProcessWithLogonW를 사용할 수 있습니다.
.. Windows 서비스에서 상승 된 프로세스를 생성 할 수있는 직접적인 방법이 없다고 생각합니다. 먼저 CreateProcessAsUser 또는 CreateProcessWithLogonW를 사용하여 승격되지 않은 프로세스를 사용자 세션 (대화 형 데스크톱)에 생성 할 수 있습니다. 그런 다음 승격되지 않은 프로세스 에서 ShellExecute (Ex)를 사용하여 실제 작업에 대해 상승 된 프로세스를 생성 할 수 있습니다. 내가/약간의 정교한 P를해야이없는 닷넷 System.Diagnostics.ProcessStartInfo 이후에 CreateProcessAsUser 또는 CreateProcessWithLogonW를 호출하는 물건을 호출 것 같은
은 또한, 나는이 작업을 수행하는 간단한 방법이 없다 결론에 도달하고있어 모든 것을 바탕으로 http://blogs.msdn.com/alejacma/archive/2007/12/20/how-to-call-createprocesswithlogonw-createprocessasuser-in-net.aspx 및 Process.Start with different credentials with UAC on
바라 보았다. 내가 놓친 게 있니? 이것은 정말 열심히해야하는 것처럼 보이지 않습니다. UAC는 비대화 형 사용 사례를 처리하도록 설계된 적이 없었던 것처럼 느껴집니다.
그리고 Microsoft 사람들이이 문서를 읽게되면 ShellExecute가 내부적으로 권한 상승을 처리하는 방법이 응용 프로그램 정보 서비스 (AIS)를 호출하는 것임을 알았습니다. 일부 Win32 또는 .NET API를 통해 AIS에 동일한 호출을 사용할 수없는 이유는 무엇입니까? http://msdn.microsoft.com/en-us/library/bb756945.aspx
죄송합니다. 어떤 아이디어 주셔서 감사합니다.
대신 서버 코어가 UAC를 지원하지 않는다고 말합니다. 내 평가를 확인하는 것 같아. http://blogs.technet.com/server_core/archive/2009/01/19/user-account-control-uac-and-server-core.aspx –
여기에 내 게시물을 참조하십시오. 특히 LinkedToken을 살펴 봅니다. 섹션 : http://brianbondy.com/blog/id/100/understanding-windows-at-a-deeper-level-sessions-window-stations-and-desktops –