2010-01-26 4 views
3

J'essaie d'ajouter un fichier exe avec une extension de fichier. Le code ci-dessous fonctionne bien avec XP, mais renvoie une erreur dans Win Vista/7.Delphi - Comment changer les extensions de fichiers par défaut dans 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); 

Comment puis-je accomplir la même chose avec Vista/7?

Répondre

10

Avez-vous essayé d'exécuter cela en tant qu'administrateur? Vous ne pouvez pas écrire dans HKEY_CLASSES_ROOT comme un ancien utilisateur dans Vista. Vous ne pouvez pas non plus utiliser XP, sauf si vous courez en tant qu'utilisateur/admin puissant. Quels sont les nombreux développeurs, mais c'est en plus le point. En d'autres termes, vous aurez besoin de l'élévation pour le faire. Here est un bon lien sur la façon de configurer un manifeste pour marquer votre application avec cette caractéristique.

+0

C'est tout. Je n'exécutais pas l'application avec un statut élevé. – croceldon

+6

Une alternative consiste à écrire dans la clé correspondante dans HKey_Current_User. Vous n'avez alors pas besoin de privilèges spéciaux et vous n'interférez pas avec les associations de fichiers d'autres utilisateurs. –

Questions connexes