2011-06-20 7 views
1

からメーカー名を取得し、アプリケーションファイルは、このようなパスに格納されています。.NETでセットアップ

C:\Program Files\[Manufacturer]\[Product Name]

私は、共通のアプリケーションデータの内のフォルダを作成していますので、私は、管理者権限なしで勝利7上の読み出し/書き込みすることができますので、私はまた、このパスでフォルダを生成:/ WRので、私は読むことができるコードでこのパスを取得するための最良の方法を何

C:\ProgramData\[Manufacturer]\[Product Name]

それはこのフォルダにありますか?

私はちょうど一定の文字列にメーカー名を入れて、同期させておくことができます。または、プロジェクトの1つのアセンブリマニフェストに追加することもできます。または、セットアップ中にファイルに保存しようとする可能性がありますか?

提案がありますか?

+0

これは実際にどのような問題がありますか? – Oded

+0

アプリケーションデータへのパスをハードコーディングしないようにしたい。 –

+0

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)を使用すると、C:\ ProgramDataなどのOS固有のパスを取得できますが、メーカー名をハードコードすることはありません。 –

答えて

1

私はディレクトリを作成する以外のセットアップで何をするだろうとは思いません。アプリケーションが実行時にディレクトリへのアクセスを管理できるようにする。

製造元と製品名を設定ファイルまたはコードのハードコード定数に保存します。あなたはまた、アセンブリからそれを見るためにいくつかの種類の反射を行うことができますが、これは私の心の中で過剰です。

ProgramDataディレクトリの場合は、%ALLUSERSPROFILE%環境変数を使用して場所を取得します。そうすれば、すべてのバージョンのウィンドウで機能します。

次に、環境変数と製造元/製品名を連結してディレクトリ全体を構築します。

0

インストーラインスタンスのContextを調べて、パスを保存し、後でParametersの中に見つけることをお勧めします。あなたは適切なパスに値CustomActionDataを設定する必要があります

(例えば/TargetDir="[TARGETDIR]"として、または利用可能で望まれる任意の他のそのような変数。)

、コードで、必要に応じて、からパスをつかみます前述したようにContextParametersプロパティは、:

var path Context.Parameters.Item("TargetDir") 
+0

これはカスタムインストーラアクション内で動作しますが、インストールされたアプリケーション自体からこのデータを取得する必要があります。 –

+1

@Josh G:その場合は、どこかにハードコードするか、実行中のアセンブリの物理的な位置に基づいて文字列を操作して、必要なデータを取得します。 。しかし、あなたの質問を更新してください。今のところインストーラを使ってインストール時にこれを行うことを意味します。 –