지금까지 파일 확장명을 응용 프로그램과 연관 시켜야만 간단히 레지스트리를 수정했습니다. 그러나 나는 수년간 그 일을 해오지 않았으며, 그 일들이 조금 바뀌 었다고 생각합니다. Windows 7/Vista (HKEY_CLASSES_ROOT가있는 경우)에서 레지스트리 액세스 제한을 방지하는 방법을 모르겠습니다. 따라서 일부 델파이 라이브러리, 유닛, 코드 스 니펫 또는 XP, Vista 및 7에서 안정적으로 작동하는 것을 찾으려고합니다. "백업"도 처리합니까? 백업이란 이전 연결에 대한 변경 사항을 되돌릴 수 있음을 의미합니다 ...특정 파일 확장명을 내 델파이 앱과 연관 시키십시오 -이 라이브러리는 무엇입니까?
답변
제 3 자 구성 요소를 사용하지 말 것을 권장합니다.
우리 모두는 HKEY_CURRENT_USER
과 HKEY_LOCAL_MACHINE
하이브를 편집하여 파일 연결을 만드는 방법을 알고 있습니다. 맞습니까? Windows Vista +에서 전자를 편집해도 아무런 문제가 없지만 시스템을 수정하려는 경우 (즉, 시스템의 모든 사용자에 대한 연결을 편집하려는 경우) 응용 프로그램을 높은 권한으로 실행해야합니다.
응용 프로그램을 높은 권한으로 실행하려면 아이콘을 마우스 오른쪽 단추로 클릭하고 "관리자 권한으로 실행"을 선택하십시오. 그러나 그것은 추한 것입니다. 그러나 애플리케이션의 리소스에 매니페스트 (XML 파일)를 추가하는 것만으로 애플리케이션을 관리자로 자동 실행시킬 수 있습니다. 그런 다음 최종 사용자가 프로그램을 시작하는 방법에 관계없이 * .exe 파일을 실행하면 UAC 프롬프트가 자동으로 팝업되고 프로그램이 관리자로 실행되어 HKEY_LOCAL_MACHINE
하이브를 완벽하게 변경할 수 있습니다. 이 매니페스트를 추가하는 방법에 대한 세부 정보는 몇 가지 SO 질문에서 설명되어 있습니다. 정말 쉽습니다.
내가 아는 한, 실행중인 응용 프로그램이 런타임에 권한을 "업그레이드"하는 것은 불가능합니다. 따라서 앱에 정상적인 권한으로 실행중인 버튼이있는 경우 다음과 같이 할 수 없습니다.
procedure Button1.Click(Sender: TObject);
begin
SomehowGetAdminPrivileges;
ChangeLocalMachineRegistry;
SomehowGetBackNormalPrivileges;
end;
이는 간단하지가 않습니다. 런타임시 관리자 권한을 필요로 뭔가를해야한다면, 당신은
procedure Button1.Click(Sender: TObject);
begin
ShellExecute(Application.Handle, nil, PChar('myapp.exe'), nil, nil, SW_SHOWNORMAL);
end;
MyApp.exe의이 제기 권한으로 실행되도록 매니페스트가 필요에 같은 외부 응용 프로그램을 호출해야하고, 당신이 원하는 것을 할 수 있습니다. 그러나 바람직하게 myapp.exe에는 GUI가 없어야합니다. 사용자가 단추를 클릭하면 UAC 프롬프트가 나타나고 myapp.exe가 레지스트리를 변경 한 다음 종료됩니다.
제 3 자 구성 요소를 사용하여이를 수행하는 것은 가능하지만 어색 할 수 있습니다.
설치 중에 레지스트리를 변경해야합니까? Inno Setup을 사용하는 경우 전문적이고 무료 도구 인 Inno Setup에 매니페스트가 포함됩니다. 따라서 설치 프로그램에서 setup.exe를 요구할 때 (Inno Setup으로 컴파일 된) setup.exe를 시작할 때 UAC 프롬프트가 나타납니다. 설정에서 HKEY_LOCAL_MACHINE
으로 변경하면됩니다.
'HKEY_CLASSES_ROOT'은'HKEY_CURRENT_USER'와'HKEY_LOCAL_MACHINE'에있는 서브 키의 "조합"입니다. http://en.wikipedia.org/wiki/HKEY_CLASSES_ROOT#HKEY_CLASSES_ROOT_.28HKCR.29를 참조하십시오. –
레지스트리와 직접 작업하는 것이 셸 파일 확장명을 관리하는 표준 방법입니다. 그리고 그것은 특히 어렵지 않습니다 ... –
그것은 어렵지 않다는 것을 압니다. 저는 Vista와 7에서 소개 된 새로운 특권 시스템을 두려워합니다. – migajek
두려워하지 않습니다. 그러나 배포 된 응용 프로그램에서이 작업을 수행하지 않는 경우에만 해당됩니다. 파일 연결 수정하기 - 앱의 설치 관리자가해야 할 일입니다. 설치 관리자는 admin/elevated로 실행되므로 HKLM의 액세스에는 문제가 없습니다. 응용 프로그램을 설치하고 등록 할 수 있습니다. 응용 프로그램 자체는 파일 assoc을 등록하지 않아야합니다. 원한다면 할 수 있어요. 그러나 이것을 위해 HKCU를 사용하십시오. – Alex