나는 서비스를 구성하는 데 사용 관리 명령 세트에 대한 LocalServer32 여기서 COM 인터페이스를 노출하는 ATL로 만든 Windows 서비스가 있고, 이러한 예를 들어 VBScript를에서 사용할 수 있습니다 : 나는 해봐요 실행할자동화에 사용되는 COM 인터페이스를 어떻게 자동으로 올릴 수 있습니까?
Set myObj = WScript.CreateObject("MySvc.Administrator")
myObj.DoSomething()
VBScript가 호출 될 때 UAC 프롬프트가 자동으로 나타나기를 바랍니다. 이것이 가능한가?
은 내가 상승 된 명령 쉘에서 스크립트를 실행할 수 있습니다 알고, 내가 사용할 수있는
objShell.ShellExecute WScript.FullName, 대하 (34) & WScript.ScriptFullName & 대하 (34), 워드 vb N ull " runas "
예를 들어 VBScript 자체를 높게 실행하면 그 중 하나가 정상적으로 작동합니다. COM 메서드는 자체적으로 상승합니다.
그러나 AFAIK는 데스크톱에서 상승 된 탐색기 창을 가져옵니다. 실제로 시작/보조 프로그램/Windows 탐색기/관리자 권한으로 실행을 마우스 오른쪽 단추로 클릭하는 것만 큼 간단하지는 않습니다. 실제로는 향상되지 않거나 적어도 COM 메서드는 자체적으로 상승하지 않습니다.) 로컬 관리 그룹의 사용자가 파일과 폴더를 스크립트로 끌어다 놓을 수있게하고 스크립트가 인수로 해당 경로 이름을 사용하여 관리 COM 인터페이스를 호출하도록합니다. COM 방법을 높일 수 있습니다. (그리고 나는 args로 원숭이를 돌리고 ShellExecute "runas"를 사용하는 것보다 더 단순하게하기를 바라고 있습니다.)
서비스 EXE 매니페스트의 requireAdministrator에 대해 UAC 실행 수준을 설정하고 Elevated/Enabled = 1로 설정해 보았습니다. MySvc.Administrator 클래스의 레지스트리에서 LocalizedString을 사용하면 트릭을 수행하지 않습니다.
편집 : 나는 COM 방법 자체가 상승 발견 썼다
가, 내가 정말로 의미하는 것은 들어오는 COM 요청의 보안 토큰은이 관리자에서 온 것을 알 수 있었다. 이 토큰을 검사하여 요청이 허용되는지 확인합니다. COM 개체가있는 Windows 서비스 프로세스는 LocalSystem으로 실행 중일 수 있습니다.
* 기존 * 프로세스를 높일 수는 없지만 * 새로운 * 프로세스 만 상승시킬 수 있습니까? 그렇다면 이해가됩니다. –
VBScript의 GetObject 호출에서 COM Elevation Moniker를 사용하면 스크립트 프로세스를 향상시키지 않고도 COM 개체를 상승 된 프로세스로 인스턴스화 할 수 있습니다. 원하는대로 처리 할 수 있습니다. 단지 DoSomething을 높여야 만합니다. 스크립트. –
나쁘지 않습니다! 나는이 별명을 전혀 알지 못했다. out-of-proc이기 때문에 COM 서버는 별도의 승격 된 프로세스이므로, 적어도 나는 당신을 오해했습니다 :-)) – wqw