2011-01-05 38 views
4

現在、レジストリを使用してファイルアソシエーションを設定するプログラムがあります(レジストリメソッドを実行する必要があります。問題は、それがHKCRに書き込もうとしているため、(他のマシン上の)管理上の問題に陥っている可能性があるということです。 HKCUや管理者権限を必要としないその他の方法を使用するなど、ファイルの関連付け(.NET 2.0の場合)を設定する、より普遍的な方法がありますか?C# - ファイルアロケーションレジストリキー 'HKEY_CLASSES_ROOT 'へのアクセスが拒否されました

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); 

答えて

16

HKEY_CLASSES_ROOTは別名、二つの他の場所のマージ、です。ファイルの登録はすべてのユーザーのものでなければなりませんか?その場合は、暗黙的にHKEY_LOCAL_MACHINEに書き込むれる(HKEY_CLASSES_ROOTとの関連を登録したい。

または登録がそうならば、HKEY_CURRENT_USERでファイルを登録する?現在のユーザーのみのためのものです。

に入れたままにしてください1人のユーザーがあなたのプログラムをインストールしたからといって、すべてのユーザーが持っているとは限りませんので、プログラムの目的を考慮してください。インストーラMSIインストーラは、インストール時に必要な場合に高度を求める方法を知っています。すべてのソフトウェアをインストールする必要はありませんProgram Files、一部は%APPDATA%(すなわち、 Chrome)をインストールする必要はありません。また、1人のユーザーにのみインストールされています。

+1

私は提供した以上の詳細を+1! –

+0

@Davidええ...でも、それはちょっと安いです。あなたはまずそれに答えた、私は投票のために釣った: –

+0

すべての情報ありがとうございました。それはHKCUを使用するほうが適切と思われます。インストーラの場合、私は現在、Visual Studioに付属のインストーラを使用しています。さらに、私のアプリケーションでは、ファイルの関連付けを無効にするオプションがあり、インストーラを超えています。 – user

4

user-specific file associationsは、HKLMにアクセスできない状況で使用できます。

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

さらに通常のファイル関連付けは、アプリケーションのインストール時に設定され、管理者権限が通常利用できます。あなたはファイルを登録している理由を決定する必要があり

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

+0

私はイアンの答えに応じて、レジストリ設定はインストールだけではありません。また、私は管理者がアクセスできるようにするためにプログラムが窮屈であることを嫌っています。便利なリンクの場合は+1。 – user

+0

@ネイトファイン、私はちょうど私が知っていたものを書いた、そして今、あなたは有用であることが証明されてからそれを取ることができます –

関連する問題