System.AddInパイプラインはどこにインストールする必要がありますか?

StackOverflow https://stackoverflow.com/questions/801579

  •  03-07-2019
  •  | 
  •  

質問

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ソリューションとしてデプロイすると、すべてのパイプラインがユーザーのアプリケーションデータフォルダーに配置されます。このようにして、各ユーザーは独自のモジュールのリストを保持できます。

これにより、書き込み可能なフォルダーの制限も回避されます。

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