2010-07-28 18 views
5

Quali dati e dove, dovrei aggiungere al registro di Windows per creare correttamente un'associazione di file?Come aggiungere correttamente associazioni di file al registro di Windows?

Ho fatto questa domanda principalmente a causa di alcune vecchie applicazioni che ho scritto anni fa, che utilizzava il packager di Windows Installer di Visual Studio .NET per creare le associazioni di file. Le estensioni installate erano .whr e .encxml.

Ora, sul computer su cui sono installate queste applicazioni, si verifica uno strano problema a volte - quando un file viene scaricato in Google Chrome o Internet Explorer (in particolare un file exe, msi o zip), il browser cambia l'estensione del file in una delle estensioni che è stata installata dal mio programma di installazione. Non so se riguarda altri browser: quei due hanno qualcosa in comune? Quindi ... se scarichi, ad esempio, http://example.com/downloads/application.exe, il file verrà scaricato come http://example.com.downloads/application.encxml (o .whr, a prescindere da quello che preleva per il momento) senza alcun motivo apparente.

Devo notare che i tasti che fanno riferimento alle chiavi HKCR\.whr e HCKR\.encxml (File XML crittografato gestore account e Record ore di lavoro) hanno spazi in essi e quando ho creato l'associazione in Visual Studio, NON ho aggiunto un ". " davanti. Forse gli spazi non sono consentiti e/o si suppone che tu faccia prefisso con "."? Il codice di registro sembra OK, ma ho notato guardando nel mio registro che ogni altra applicazione NON usa uno spazio nella classe di associazione, né questo problema si verifica con QUALSIASI altra estensione di file da qualsiasi applicazione installata su macchine che conosco - solo quelli creati dagli installatori VS delle mie applicazioni. Ho incollato un dump del Registro di sistema delle chiavi di registro corrispondenti e dei valori relativi alle estensioni dei file - dal momento che MSI è proprietario non ho idea se questo è tutto, ma da quello che so da altre applicazioni questo dovrebbe essere tutto. Mi sono sempre chiesto questo problema per anni, ma non sono mai riuscito a capirlo. Sto sostituendo presto una di quelle vecchie applicazioni con un nuovo prodotto, quindi questa volta voglio assicurarmi che non ci siano bug strani come questo ...

Ecco i dati (nota che ho indicato i valori di testo di alcune stringhe binarie con un commento // sotto del valore):

[HKEY_CLASSES_ROOT\.encxml] 
"Content Type"="application/octet-stream" 
@="Account Manager Encrypted XML File" 

[HKEY_CLASSES_ROOT\.encxml\Account Manager Encrypted XML File] 

[HKEY_CLASSES_ROOT\.encxml\Account Manager Encrypted XML File\ShellNew] 

[HKEY_CLASSES_ROOT\Account Manager Encrypted XML File] 
@="Account Manager Encrypted XML File" 

[HKEY_CLASSES_ROOT\Account Manager Encrypted XML File\DefaultIcon] 
@=hex(2):25,00,41,00,50,00,50,00,44,00,41,00,54,00,41,00,25,00,5c,00,4d,00,69,\ 
    00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,5c,00,49,00,6e,00,73,00,74,00,\ 
    61,00,6c,00,6c,00,65,00,72,00,5c,00,7b,00,42,00,36,00,34,00,31,00,37,00,36,\ 
    00,30,00,42,00,2d,00,37,00,44,00,42,00,37,00,2d,00,34,00,46,00,31,00,42,00,\ 
    2d,00,41,00,44,00,36,00,45,00,2d,00,30,00,41,00,33,00,34,00,32,00,30,00,46,\ 
    00,35,00,45,00,45,00,30,00,44,00,7d,00,5c,00,5f,00,36,00,46,00,45,00,46,00,\ 
    46,00,39,00,42,00,36,00,38,00,32,00,31,00,38,00,34,00,31,00,37,00,46,00,39,\ 
    00,38,00,46,00,35,00,34,00,39,00,2e,00,65,00,78,00,65,00,2c,00,30,00,00,00 

// Product code GUID is: {F7F214E9-ED37-4AE1-B0D2-93427973E60A}, which is different from below but I probably changed it at some point for some reason 
// %APPDATA%\Microsoft\Installer\{B641760B-7DB7-4F1B-AD6E-0A3420F5EE0D}\_6FEFF9B68218417F98F549.exe,0 

[HKEY_CLASSES_ROOT\Account Manager Encrypted XML File\shell] 
@="open" 

[HKEY_CLASSES_ROOT\Account Manager Encrypted XML File\shell\open] 
@="&Open" 

[HKEY_CLASSES_ROOT\Account Manager Encrypted XML File\shell\open\command] 
@="\"C:\\Program Files\\Petroules Enterprises\\Account Manager\\AccountManager.exe\" \"%1\"" 
"command"=hex(7):4c,00,29,00,25,00,59,00,63,00,73,00,67,00,2d,00,4c,00,41,00,\ 
    28,00,30,00,64,00,66,00,34,00,36,00,75,00,5f,00,50,00,27,00,3e,00,27,00,7d,\ 
    00,27,00,66,00,25,00,6f,00,59,00,64,00,4b,00,69,00,48,00,74,00,7a,00,35,00,\ 
    21,00,55,00,2b,00,6c,00,68,00,54,00,20,00,22,00,25,00,31,00,22,00,00,00,00,\ 
    00 

// This is a bizarre-looking value... what's up with that? 
// L)%Ycsg-LA(0df46u_P'>'}'f%oYdKiHtz5!U+lhT "%1" 

[HKEY_CLASSES_ROOT\.whr] 
"Content Type"="application/octet-stream" 
@="Work Hours Record" 

[HKEY_CLASSES_ROOT\.whr\Work Hours Record] 

[HKEY_CLASSES_ROOT\.whr\Work Hours Record\ShellNew] 

[HKEY_CLASSES_ROOT\Work Hours Record] 
@="Work Hours Record" 

[HKEY_CLASSES_ROOT\Work Hours Record\DefaultIcon] 
@=hex(2):25,00,41,00,50,00,50,00,44,00,41,00,54,00,41,00,25,00,5c,00,4d,00,69,\ 
    00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,5c,00,49,00,6e,00,73,00,74,00,\ 
    61,00,6c,00,6c,00,65,00,72,00,5c,00,7b,00,46,00,41,00,32,00,33,00,44,00,37,\ 
    00,36,00,34,00,2d,00,46,00,36,00,34,00,39,00,2d,00,34,00,38,00,46,00,39,00,\ 
    2d,00,38,00,44,00,30,00,42,00,2d,00,45,00,31,00,38,00,38,00,35,00,41,00,39,\ 
    00,38,00,31,00,46,00,39,00,39,00,7d,00,5c,00,5f,00,36,00,46,00,45,00,46,00,\ 
    46,00,39,00,42,00,36,00,38,00,32,00,31,00,38,00,34,00,31,00,37,00,46,00,39,\ 
    00,38,00,46,00,35,00,34,00,39,00,2e,00,65,00,78,00,65,00,2c,00,30,00,00,00 

// Product code GUID: {FA23D764-F649-48F9-8D0B-E1885A981F99}, same as below 
// %APPDATA%\Microsoft\Installer\{FA23D764-F649-48F9-8D0B-E1885A981F99}\_6FEFF9B68218417F98F549.exe,0 

[HKEY_CLASSES_ROOT\Work Hours Record\shell] 

[HKEY_CLASSES_ROOT\Work Hours Record\shell\open] 
@="&Open" 

[HKEY_CLASSES_ROOT\Work Hours Record\shell\open\command] 
@="\"C:\\Program Files\\Petroules Enterprises\\Work Hours Calculator\\WorkHoursCalculator.exe\" \"%1\"" 
"command"=hex(7):28,00,5d,00,56,00,49,00,79,00,55,00,7b,00,5e,00,4e,00,3f,00,\ 
    26,00,68,00,48,00,7e,00,53,00,24,00,6e,00,31,00,36,00,59,00,3e,00,33,00,75,\ 
    00,5f,00,7d,00,47,00,26,00,70,00,79,00,75,00,78,00,38,00,4e,00,72,00,43,00,\ 
    6e,00,67,00,27,00,44,00,67,00,42,00,20,00,22,00,25,00,31,00,22,00,00,00,00,\ 
    00 

// Same bizarre-looking type of value as before, but different... 
// (]VIyU{^N?&hH~S$n16Y>3u_}G&pyux8NrCng'DgB "%1" 
+0

Vedere http://stackoverflow.com/questions/69761/how-to -associate-a-file-extension-to-the-current-executable-in-c per alcuni progetti di codice che l'hanno fatto con successo. Anche se non si scrive codice in C#, è comunque possibile leggere il codice per capire come lo fanno. –

+0

Scusa Robert, ma non è corretto. Windows Installer è un modello di programmazione dichiarativa non imperativo. Guardare un esempio in C# ed emularlo sarebbe considerato un fagile, antipattern fuori dal processo nel mondo MSI. –

risposta

Problemi correlati