Question

Mon client remplace MS Office par OpenOffice sur certains postes de travail. Mon programme exporte un fichier vers Excel en utilisant l’extension .xml (en utilisant le format ouvert) et l’ouvre en utilisant le programme associé actuel (en utilisant ShellExecute)

Le problème est qu'OpenOffice n'enregistre pas l'extension .xml qui lui est associée.

L'association fonctionne normalement, mais je souhaite créer un .reg ou quelque chose qui permette de modifier facilement le paramètre.

Je cherche dans le registre d'un PC les modifications déjà apportées, mais

"HKEY_CLASSES_ROOT\.xml" 
La touche

n’a rien qui référence OpenOffice.

Où l'association est-elle enregistrée? Comment puis-je créer un script pour faire le travail?

Était-ce utile?

La solution

La véritable association est stockée dans la clé vers laquelle pointe & H; HKEY_CLASSES_ROOT \ .xml & .

Sur ma machine, la valeur par défaut de cette clé indique " fichier xml " , ce qui est probablement le même pour le vôtre.

Passons donc à " HKEY_CLASSES_ROOT \ xmlfile & <; code>. Là vous pouvez voir (et changer) quelle commande va être utilisée pour lancer ce type de fichier:

HKEY_CLASSES_ROOT\xmlfile\shell\open\command

Windows utilise ce type de redirection pour mapper plusieurs extensions de fichier sur le même type de fichier, et donc sur la même application.

Sous "HKEY_CLASSES_ROOT \ xmlfile \ shell" , il existe plusieurs sous-clés qui ressemblent aux "verbes". de ce que vous pouvez faire pour le fichier. De nouveau, la valeur par défaut de la touche "shell" détermine lequel de ces verbes est utilisé si vous double-cliquez sur le fichier. Dans mon cas, il s'agit de "Ouvrir" .

Conclusion:

Avec cette connaissance, le moyen le plus simple de rendre une association scriptable est d’utiliser regedit pour exporter un fichier .reg contenant cette modification et de l’appliquer à l’ordinateur cible par un double clic ou:

regedit /s new_xml_association.reg

ou (si vous êtes sur XP ou supérieur et savez ce que vous faites) écrasez la valeur actuelle avec:

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

Quoi qu’il en soit, il est conseillé d’examiner de plus près la commande reg add /? . La première solution est plus sûre.

Autres conseils

considère la commande dos assoc :

  

C: > assoc /?   Affiche ou modifie l'extension du fichier   associations

     

ASSOC [.ext [= [FileType]]]

     

.ext Spécifie le fichier   extension pour associer le type de fichier   with fileType Spécifie le fichier   type à associer au fichier   extension

     

Type ASSOC sans paramètres à   afficher les associations de fichiers en cours.   Si ASSOC est appelé avec seulement un fichier   extension, il affiche le courant   association de fichier pour ce fichier   extension. Ne rien spécifier pour le   type de fichier et la commande va supprimer   l'association pour le fichier   extension.

Dans ce cas, utiliser des associations de fichiers semble être une mauvaise chose à faire. Vous voulez que votre application ouvre le fichier dans OpenOffice, mais que se passe-t-il si votre utilisateur souhaite laisser l'association de fichier pour les fichiers XML intacte? Et si quelque chose d'autre sur leur système s'appuie également sur cette association? Vous cassez leur système dans ce cas. Si vous êtes un informaticien, c’est peut-être acceptable (pratique de programmation discutable encore), mais sinon, c’est une mauvaise chose à faire.

Utilisez l'implémentation OpenOffice COM pour ouvrir le fichier à la place.

Bon exemple simple ici: http://www.kalitech.fr/clients/doc/VB_APIOOo_en.html

Je viens de découvrir cela en cherchant la même réponse. J'ai trouvé une meilleure solution à l'aide de l'API Windows FindExecutable, qui peut être utilisée à partir de C # à l'aide de PInvoke.

http://www.pinvoke.net/default.aspx/shell32.findexecutable

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top