2009-09-04 3 views
1

Vista의 ShellExecuteEx 및 lpVerb = "runas"가있는 다른 호스트 프로세스에서 상승 된 프로세스 (예 : file_copier.exe)를 실행하려고합니다. UAC 대화 상자를 표시하고 상승 된 상태로 실행되며 "위험한"폴더로 파일을 복사하지만 기존 파일 (exe 's)은 ​​덮어 쓰지 않습니다.Vista의 프로세스가 향상 되어도 파일을 덮어 쓰지 않습니다.

여기를 읽었습니다 : http://www.codeproject.com/KB/vista-security/UAC__The_Definitive_Guide.aspx UAC는 실제로 기존 파일을 덮어 쓰지 않지만 새 파일을 일종의 캐시에 저장합니다. 하지만 그럴 수 없다면 알아낼 수 없습니다. 실제로는 기존 파일을 덮어 씁니다. 어떤 도움을 주셔서 감사합니다.

+0

어떤 폴더에 편지를 쓰고 있습니까? –

답변

3

당신은 virtualization of file system에 대해 이야기하고 있습니다. 프로그램이 Windows 규칙을 인식하고 있음을 Windows에 알리려면 manifest file을 변경해야합니다.

매니페스트 다음 텍스트에 추가 : 그냥 내 실수였다

<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
    <application> 
     <!--The ID below indicates application support for Windows Vista --> 
     <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
     <!--The ID below indicates application support for Windows 7 --> 
     <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> 
     <!--The ID below indicates application support for Windows 8 --> 
     <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/> 
    </application> 
    </compatibility> 
+0

+1 : 도움이됩니다. "{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"은 Windows 8의 GUID입니다. ([here] (http://msdn.microsoft.com/en-us/library/windows)를 참조하십시오. /desktop/hh848036(v=vs.85).aspx) 예) – Oleg

0

죄송합니다들. 코드는 다음과 같습니다.

ShellExecuteEx(file_copier.exe); 
LaunchFreshVersionOfApplication(); 

실제로 ShellExecuteEx는 file_copier.exe 프로세스가 완료되기 전에 반환되었습니다. 따라서 이후 프로세스에서 실행중인 파일을 업데이트 할 수 없습니다. 당신의 대답 주셔서 감사합니다, Kirill!

+0

그런 다음 Kirill에게 체크 표시를하여 자격이있는 담당자에게 알려주지 않으시겠습니까? –

+0

기쁨으로, 그러나 나의 명망은 단지 9이고, 투표는 15를 요구한다, 미안. –

관련 문제