7

私は現在、レジストリを使用してファイルの関連付けを設定するプログラムを持っています (これは .NET 2.0 であるため、レジストリ メソッドを実行する必要があります)。問題は、HKCR に書き込もうとしているため、(他のマシンで) 管理上の問題が発生する可能性があることです。HKCUまたは管理者権限を必要としない他の方法を使用するなど、ファイルの関連付けを設定するより普遍的な方法(.NET 2.0の場合)はありますか?

string keyName = "Class";
string keyValue = "Class File";
string apppath = Application.ExecutablePath.ToLower() + " \"%1\"";
RegistryKey key;
key = Registry.ClassesRoot.CreateSubKey(keyName);
key.SetValue("", keyValue);

RegistryKey iconkey;
key = Registry.ClassesRoot.CreateSubKey(keyName);
iconkey = key.CreateSubKey("DefaultIcon");
iconkey.SetValue("", Environment.CurrentDirectory + "\\resources\\musicfile.ico");

key = key.CreateSubKey("shell");
key = key.CreateSubKey("open");
key = key.CreateSubKey("command");
key.SetValue("", apppath);
4

2 に答える 2

20

HKEY_CLASSES_ROOTは、別の 2 つの場所のエイリアス (マージ) です。

  • HKEY_CURRENT_USER\Software\Classes
  • HKEY_LOCAL_MACHINE\Software\Classes

ファイルを登録する理由を決定する必要があります。ファイル登録はすべてのユーザーを対象とするものですか? その場合、関連付けを に登録しますHKEY_CLASSES_ROOT(これにより、暗黙的にHKEY_LOCAL_MACHINE.

または、登録は現在のユーザーのみを対象としていますか? その場合は、ファイルを に登録しますHKEY_CURRENT_USER

1 人のユーザーがあなたのプログラムをインストールしたからといって、すべてのユーザーがそれを望んでいるとは限らないことに注意してください。そのため、プログラムの目的を検討してください。

いずれにせよ、ファイルの関連付けを登録する適切なタイミングは、MSI インストーラーによるインストール時でした。MSI インストーラーは、インストール中に昇格を要求する方法を知っています (必要な場合)。すべてのソフトウェアをインストールする必要はありません。インストールに管理者権限を必要としないProgram Filesものもあります%APPDATA%(例: Chrome)。インストールは 1 人のユーザーに対してのみ行われます。

于 2011-01-05T20:03:03.700 に答える
5

HKLM にアクセスできない状況では、ユーザー固有のファイルの関連付けを使用できます。

または、管理者権限を要求するようにアプリをマニフェストすることもできます。

通常、ファイルの関連付けは、管理者権限が通常利用可能なアプリケーションのインストール中に設定されます。

于 2011-01-05T19:53:27.240 に答える