내 C# 응용 프로그램의 경우 응용 프로그램 시작시 항상 권한 상승을 요구하지 않지만 UAC로 보호되는 출력 경로를 선택하면 권한 상승을 요청해야합니다.경로가 보호되는 경우 Windows Vista UAC 표고를 요청 하시겠습니까?
그래서 경로가 UAC로 보호되어 있는지 확인한 다음 고도 실행을 요청하려면 어떻게해야합니까?
내 C# 응용 프로그램의 경우 응용 프로그램 시작시 항상 권한 상승을 요구하지 않지만 UAC로 보호되는 출력 경로를 선택하면 권한 상승을 요청해야합니다.경로가 보호되는 경우 Windows Vista UAC 표고를 요청 하시겠습니까?
그래서 경로가 UAC로 보호되어 있는지 확인한 다음 고도 실행을 요청하려면 어떻게해야합니까?
조치를 수행 할 수 없는지 감지하는 가장 좋은 방법은이를 시도하고 UnauthorizedAccessException
을 잡는 것입니다.
그러나 @DannySmurfcorrectly points out과 같이 COM 개체를 높이거나 프로세스를 분리 할 수 있습니다.
UAC Demo이라는 Windows SDK 교차 기술 예제에는 데모 응용 프로그램이 있습니다. 이 데모 응용 프로그램은 승격 된 프로세스로 작업을 실행하는 방법을 보여줍니다. 또한 사용자가 현재 관리자인지 확인하는 방법을 보여줍니다.
요청 고도 중반 실행이 필요 당신 중 하나
.NET에서는 현재 실행중인 프로세스를 향상시킬 수있는 방법이 없습니다. 위의 해커 일들 중 하나를 수행해야하지만, 현재의 프로세스가 올라간다는 것을 사용자에게 알려주는 것뿐입니다.
경로가 UAC인지 여부를 확인하는 유일한 방법은 승격되지 않은 상태에서 승격하고 다시 시도하는 동안 사소한 쓰기를 시도하는 것입니다.
하는 것으로 - 그것은 사용자 계정 컨트롤 시스템의 일반적인 제한입니다. –
이것은 UAC 제한 사항이 아니라 Windows NT의 보안 모델에 대한 일반적인 제한 사항입니다 (실행중인 프로세스가 보안 토큰을 변경할 수 없음). –
악의적 인 공격자가 사전 승격 프로세스에 코드를 삽입 할 수 있으며이 코드가이 프로세스와 함께 상승 될 수 있다는 점에 유의하십시오. – ghord
경로가 보호되었다는 것을 사용자에게 알리고 파일을 "안전한"영역으로 출력하도록 요청할 수 있습니다. 이렇게하면 앱에 표고가 필요하지 않습니다. 나는 그것이 당신의 사용자와 당신이 무엇을하려고하는지에 달려 있다고 확신하지만, 윈도우/System32 폴더에 xyz를 버려도 괜찮다고 생각하지 않는다는 것을 친절하게 알려주지는 않는다고 생각합니다.
보조 드라이브에 다른 파일 복사본이 설치되어있는 것처럼 자신의 파일 사용 권한이있는 경우. 프롬프트됩니다.
Windows 탐색기에서 같은 디렉터리로 열려 있고 파일 미리보기에서 내용을 표시하는 파일을 선택한 경우 파일이 사용 중인지 확인하는 메시지가 표시됩니다. 파일이 사용 중이거나 민감한 디렉토리 인 경우 파일 사용 권한을 요청받습니다.
FolderBrowserDialog을 반복 할 경우 사용자에게 이유를 알리십시오. 따라서 앱에서 화를 낼 필요가 없습니다.
참고 사항 : 그것은 악의를 품지 않습니다. NET에서 권한을 요청하는 방법, 어쩌면 P는/Win32 API를 호출 ...?
P/Invoking은 아무 것도 변경하지 않습니다. UAC에 대한 규칙은 관리 대상이든 기본이든간에 동일합니다. 그것은 COM, 외부 프로세스 또는 흉상입니다. –
UAC가 GUID를 기반으로 객체를 높일 수 있고,이 (이론적으로)는 GUID를 가진 모든 클래스가 상승 할 수 있다는 의미는 UACDemo 또한이
내가 그것을 잘 모르겠어요 수행하는 방법을 보여 주어야한다 당신을 위해 어떤 도움이지만이 블로그 게시물에서 좀 걸릴 수 있습니다 : 이것은 .NET 제한되지 않습니다
http://haishibai.blogspot.com/2010/01/tiy-try-out-windows-7-uac-using-c-part_26.html
UAC 데모에 대한 좋은 참고서, 정확히 내가 필요로하는 것. 매우 감사합니다. 가끔씩 더 많은 연설을 할 수 있으면 좋겠다! – Ryan
@ 라이언. 천만에. UAC가 관리되는 환경에있는 것처럼 보이는 것이 조금 힘들 것입니다. 내 사용자 프로필을 탐색하고 다른 질문을 upvote 자유롭게! :) –
BTW, 예외 이름은 UnauthorizedAccessException이며 z는 Unauthorized입니다. 그냥 그;) –