2010-01-26 4 views
3

파일 확장명을 가진 exe 파일을 등록하려고합니다. 아래의 코드는 XP에서는 잘 작동하지만 Windows Vista/7에서는 오류가 발생합니다.Delphi - Vista/Win 7에서 기본 파일 확장명을 변경하는 방법

var 
    reg: TRegistry; 
begin 
    reg := TRegistry.Create; 
    try 
    reg.RootKey := HKEY_CLASSES_ROOT; 
    reg.OpenKey('.' + ExtName, True); 
    reg.WriteString('', ExtName + 'file'); //error: Failed to set data for '' 
    reg.CloseKey; 
    reg.CreateKey(ExtName + 'file'); 
    reg.OpenKey(ExtName + 'file\DefaultIcon', True); 
    reg.WriteString('', AppName + ',0'); 
    reg.CloseKey; 
    reg.OpenKey(ExtName + 'file\shell\open\command', True); 
    reg.WriteString('', AppName + ' "%1"'); 
    reg.CloseKey; 
    finally 
    reg.Free; 
    end; 

    SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil); 

어떻게 Vista/7에서이 동일한 작업을 수행 할 수 있습니까?

답변

10

관리자로 실행 해 보셨습니까? Vista에서는 이전 사용자로 HKEY_CLASSES_ROOT에 쓸 수 없습니다. 고급 사용자/관리자로 실행하지 않는 한 XP에서 할 수도 없습니다. 많은 개발자가 있지만 그게 요점입니다.

즉,이를 수행하려면 표고가 필요합니다. Here은 애플리케이션에이 특성을 표시하도록 매니페스트를 설정하는 방법에 대한 좋은 링크입니다.

+0

그게 전부입니다. 상승 된 상태로 앱을 실행하지 않았습니다. – croceldon

+6

대안은 HKey_Current_User의 해당 키에 쓰는 것입니다. 그런 다음 특별한 권한이 필요하지 않으며 다른 사용자의 파일 연결을 방해하지 않습니다. –

관련 문제