2009-04-29 9 views
4

私はWiXインストーラを備えた普通のWindowsフォームアプリケーションを持っていて、すべてのユーザーに対して、Program Filesフォルダにインストールされています。アプリケーションは、System.AddIn frameworkを使用してアドインをホストします。System.AddInパイプラインはどこにインストールする必要がありますか?

System.AddInフレームワークは、私がアドインをインストールするのに最適な場所を知らないアドインパイプラインフォルダ(AddInsAddInSideAdaptersAddInViewsContractsHostSideAdapters)の一部に書き込みをする必要があるため。ユーザーには書き込み権限がないため、Program Filesにインストールすることはできません。ユーザーのApplication Dataフォルダーにインストールすると、他のユーザー用にアドインがインストールされません。

私は、ここでは相反する要件があることを認識しています(ユーザーは他のユーザーのアドインを使いこなすことはできず、すべてのユーザーに対してアドインをインストールし、すべてのユーザーに書き込み権限が必要です)実用的なルートを取る?

System.AddInフレームワークで書き込む必要があるファイルをApplication Dataに別々に保存することはできませんが、それはフレームワークの制限のようです。

答えて

2

私はこの質問は

あなたは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); 
0

「すべてのユーザー」と「仰角なし」の両方を持つことはできません。私はSystem.AddInフレームワークが何であるか正確には分かっていませんが、ユーザープロセス(つまり、プロセスのようなシステムサービスではない)から実行されることを意図している場合、ユーザープロファイルの下に書き込む必要があります(ApplicationDataFolderは、 。それはすべてのアプリケーションが従わなければならない非常に基本的なルールです。あなたのコメントからの私の限られた理解に基づいて、それはSystem.AddInフレームワークがそのルールを破るように聞こえる。

しかし、私はおそらく何かが欠けているでしょう。

+0

私たちは同じことを欠けていると思う、それゆえ私の質問。 :) – GraemeF

1

さらに良い答えを期待していますが、それを行う唯一の方法は、アプリケーションを実行するたびにプログラムファイルにパイプラインをインストールし、アプリケーションデータにコピーすることです。次に、System.AddInフレームワークをApplication Dataのパイプラインコピーにポイントして、ユーザープロファイルに書き込むようにします。

+0

私はあなたのアプローチが正しいと思います。既存のAddInsが存在しない限り、ユーザーのアプリケーションデータに「デフォルトの」AddInsをコピーします。 – VVS

0

WiXインストーラを使用する必要がありますか?アプリケーションをクリックソリューションとして展開すると、すべてのパイプラインがユーザーアプリケーションのデータフォルダーに配置されます。こうすることで、各ユーザーはモジュールの独自のリストを保持できます。

これは、書き込み可能なフォルダの制限を回避します。

+0

各ユーザーがそれをインストールすれば同じことがWindowsインストーラにも当てはまりますが、それは私が探しているものではありません。 – GraemeF

関連する問題