11

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

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

手動での関連付けは問題なく機能しますが、設定を簡単に変更できるように.regなどを作成したいと思います。

すでに変更が加えられたPCのレジストリを調べていますが、

"HKEY_CLASSES_ROOT\.xml" 

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

アソシエーションはどこに保存されますか?どうすれば作業を行うためのスクリプトを作成できますか?

4

4 に答える 4

17

実際の関連付けは、を"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/?お勧めします。最初の解決策はより安全です。

于 2008-10-17T16:47:06.823 に答える
2

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

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

ASSOC [.ext[=[ファイルタイプ]]]

.ext ファイルの種類を fileType に関連付けるファイル拡張子を指定します ファイル拡張子に関連付けるファイルの種類を指定します

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

于 2008-10-17T17:03:25.107 に答える
1

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

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

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

于 2012-09-18T17:32:39.463 に答える
-1

同じ答えを探しているときに、これに出くわしました。PInvoke を使用して C# から使用できる Windows FindExecutable API を使用して、より良い解決策を見つけました。

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

于 2010-09-15T15:39:51.170 に答える