System.AddInパイプラインはどこにインストールする必要がありますか?
質問
WiXインストーラーを備えた単純な古いWindowsフォームアプリケーションがあり、すべてのユーザーが Program Files
フォルダーにインストールされます。アプリケーションは、 System.AddInフレームワークを使用してアドインをホストします。
System.AddInフレームワークは、アドインパイプラインフォルダー( AddIns
、 AddInSideAdapters
、 AddInViews
、< code> Contracts および HostSideAdapters
)アドインをインストールするのに最適な場所がわかりません。ユーザーに書き込み権限がないため、 Program Files
にインストールできません。また、ユーザーの Application Data
フォルダーにインストールすると、アドインはインストールされません。他のユーザー用にインストールされます。
ここでは競合する要件があることを理解しています(ユーザーは他のユーザーのアドインを台無しにすることはできません。すべてのユーザーにアドインをインストールする必要があり、すべてのユーザーが書き込み許可を必要とします)取るルート?
System.AddInフレームワークが書き込む必要があるファイルを Application Data
に個別に保存できないのは残念ですが、それはフレームワークの制限のようです。
解決
この質問はずっと前に尋ねられたのは知っていますが、...
Environment.SpecialFolder.CommonApplicationDataを試しましたか?
Vista / Windows 7では、このフォルダーは%ProgramData%
です。私はそれがWindows XPで何であるかを100%確信していませんが、おそらく%ALLUSERSPROFILE%
です。
いずれの場合も、このフォルダーには読み取り/書き込みの許可が必要であり、すべてのユーザーに対して同じである必要があります。
会社/アプリケーション名のサブフォルダーを作成することを忘れないでください:
string companyName = "My Company";
string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
string path = Path.Combine(folderPath, companyName);
他のヒント
さらに良い答えを期待していますが、それを行う唯一の方法は、プログラムファイルにパイプラインをインストールし、アプリケーションを実行するたびにアプリケーションデータにコピーすることだと思います。次に、System.AddInフレームワークがApplication Dataのパイプラインコピーを指すようにして、ユーザープロファイルへの書き込みのみを試みます。
うーん、両方の「すべてのユーザー」を持つことはできません。および「標高なし」。 System.AddInフレームワークが何であるかは正確にはわかりませんが、ユーザープロセス(別名:プロセスのようなシステムサービスではない)から実行する場合は、ユーザープロファイルの下に書き込む必要があります(ApplicationDataFolderは素晴らしい場所です) 。これは、すべてのアプリケーションが従わなければならない非常に基本的なルールです。あなたのコメントからの私の限られた理解に基づいて、System.AddInフレームワークがその規則に違反しているように聞こえます。
しかし、おそらく何かが足りないだけです。
WiXインストーラーを使用する必要がありますか?アプリをclickonceソリューションとしてデプロイすると、すべてのパイプラインがユーザーのアプリケーションデータフォルダーに配置されます。このようにして、各ユーザーは独自のモジュールのリストを保持できます。
これにより、書き込み可能なフォルダーの制限も回避されます。