質問

私のクライアントは、一部のワークステーションでMS OfficeをOpenOfficeに置き換えています。私のプログラムは、.xml拡張子(オープン形式を使用)を使用してファイルをExcelにエクスポートし、現在の関連プログラム(ShellExecuteを使用)を使用して開きます

問題は、OpenOfficeがそれに関連付けられた.xml拡張子を登録しないことです。

手動での関連付けは正常に機能しますが、.regなどを作成して簡単に設定を変更したいです。

既に変更が加えられたPCのレジストリを探していますが、

"HKEY_CLASSES_ROOT\.xml" 

キーにはOpenOfficeを参照するものはありません。

関連付けはどこに保存されますか?作業を行うスクリプトを作成するにはどうすればよいですか?

役に立ちましたか?

解決

実際の関連付けは、" HKEY_CLASSES_ROOT \ .xml" が指すキーに保存されます。

私のマシンでは、そのキーのデフォルト値は" xmlfile" であり、ほとんどの場合は同じです。

" HKEY_CLASSES_ROOT \ xmlfile" に移動します。そこで、そのタイプのファイルを起動するために使用されるコマンドを確認(および変更)できます。

HKEY_CLASSES_ROOT\xmlfile\shell\open\command

Windowsはこの種類のリダイレクトを使用して、複数のファイル拡張子を同じファイルタイプ、つまり同じアプリケーションにマップします。

" HKEY_CLASSES_ROOT \ xmlfile \ shell" には、「動詞」に似た複数のサブキーがあります。ファイルに対して何ができるのか。繰り返しになりますが、" shell" キーのデフォルト値は、ファイルをダブルクリックしたときにこれらの動詞のどれを使用するかを決定します。私の場合、これは" open" です。

結論:

その知識があれば、関連付けをスクリプト化可能にする最も簡単な方法は、regeditを使用してその変更を含む.regファイルをエクスポートし、ダブルクリックまたは次の操作でターゲットコンピューターに適用することです。

regedit /s new_xml_association.reg

または(XP以上を使用していて、何をしているのかを知っている場合)現在の値を次で上書きします:

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

とにかく、 reg add /?コマンドを詳しく調べることをお勧めします。最初の解決策はより安全です。

他のヒント

DOSコマンド assoc を検討してください:

  

C:> assoc /?   ファイル拡張子を表示または変更します   関連付け

     

ASSOC [.ext [= [fileType]]]

     

.extファイルを指定します   ファイルタイプを関連付ける拡張子   with fileTypeファイルを指定します   ファイルに関連付けるタイプ   拡張機能

     

パラメータなしでASSOCと入力します   現在のファイルの関連付けを表示します。   ASSOCがファイルのみで呼び出された場合   拡張子、現在の   そのファイルのファイル関連付け   拡張。何も指定しない   ファイルタイプとコマンドは削除します   ファイルの関連付け   拡張子。

この場合、ファイルの関連付けを使用するのは間違っているようです。アプリケーションがOpenOfficeでファイルを開くようにしますが、ユーザーがXMLファイルのファイルの関連付けをそのまま残したい場合はどうしますか?システム上の他の何かもその関連付けに依存しているとしたらどうでしょうその場合、システムを壊しています。あなたがIT担当者であれば、おそらくそれで問題ありません(まだプログラミングの問題)。しかしそうでなければ、これは悪いことです。

代わりにOpenOffice COM実装を使用してファイルを開きます。

ここでの簡単な例: http://www.kalitech.fr/clients/doc/VB_APIOOo_en.html

同じ答えを探しているときに、私はこれに出会いました。 Windows FindExecutable APIを使用して、PInvokeを使用してC#から使用できるより良いソリューションを見つけました。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top