2010-01-26 48 views
3

我想添加一個文件擴展名註冊一個EXE文件。下面的代碼在XP下運行良好,但在Win Vista/7中引發錯誤。德爾福 - 如何更改在Vista /贏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中的相應密鑰。那麼你不需要特殊的權限,也不會干擾其他用戶的文件關聯。 –