Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Script to associate an extension to a program

My customer is replacing MS Office with OpenOffice in some workstations. My program export a file to Excel using the .xml extension (using open format) and opens it using the current associated program (using ShellExecute)

The problem is that OpenOffice does not register the .xml extension associated with it.

Manually association works fine, but I want to make a .reg or something to easily change the setting.

I'm looking in the registry in a PC with the change already made, but the

"HKEY_CLASSES_ROOT\.xml" 

key does not have anything referencing OpenOffice.

Where is the association stored? How can I make a script to do the work?

like image 349
Eduardo Molteni Avatar asked Oct 17 '08 16:10

Eduardo Molteni


People also ask

How do you associate a program with an extension?

Click the Change program button. Select the program you want to associate, open the file extension, and click OK. If the program you want to select is not listed, click the Browse button, find the program's executable (.exe) file on the computer, and click OK to select that program.

What is a program name extension?

1) In computer operating systems, a file name extension is an optional addition to the file name in a suffix of the form ". xxx" where "xxx" represents a limited number of alphanumeric characters depending on the operating system.


2 Answers

consider the dos command assoc:

C:>assoc /? Displays or modifies file extension associations

ASSOC [.ext[=[fileType]]]

.ext Specifies the file extension to associate the file type with fileType Specifies the file type to associate with the file extension

Type ASSOC without parameters to display the current file associations. If ASSOC is invoked with just a file extension, it displays the current file association for that file extension. Specify nothing for the file type and the command will delete the association for the file extension.

like image 84
kenny Avatar answered Oct 21 '22 03:10

kenny


The real association is stored in the key that "HKEY_CLASSES_ROOT\.xml" points to.

On my machine, the default value of that key says "xmlfile", most likely that is the same for yours.

So let's go to "HKEY_CLASSES_ROOT\xmlfile". There you can see (and change) what command is going to be used to launch that type of file:

HKEY_CLASSES_ROOT\xmlfile\shell\open\command

Windows uses this kind of redirection to map multiple file extensions to the same file type, and thus to the same application.

Under "HKEY_CLASSES_ROOT\xmlfile\shell" there are multiple sub-keys that resemble the "verbs" of what you can do to the file. Again, the default value of the "shell" key decides which of these verbs is used if you double click the file. In my case this is "open".

Conclusion:

With that knowledge, the easiest way to make an association scriptable is to use regedit to export a .reg file containing that change, and apply it to the target computer with a double click or:

regedit /s new_xml_association.reg

or (if you are on XP or higher and know what you do) overwrite the current value with:

reg add "HKEY_CLASSES_ROOT\xmlfile\shell\open\command" /ve /d "path\to\program %1"

At any rate, a deeper look into reg add/? command is advised. The first solution is safer.

like image 41
Tomalak Avatar answered Oct 21 '22 03:10

Tomalak