0

VS2010 で .NET アプリケーションを展開しています。私のアプリケーションは、.exe と同じディレクトリのログ フォルダーに .txt ファイルを作成します。

app.exe
add.exe.config
logs (folder)

setup プロジェクトを使用して MSI インストーラーを作成しました。クライアント マシンの C: ドライブまたは任意のドライブにインストールした場合、.txt ファイルを作成するのに問題はありませんが、C:\Program File\myAppFolder または C:\Program File(x86)\myAppFolder にインストールした場合は作成できません。 .txt ファイルを作成します。

4

3 に答える 3

1

アプリケーションのインストール場所に書き込むのは不適切な設計です。に書いたほうがいいApplicationDataFolderです。はユーザー プロファイルのApplicationDataFolder下にあり、そのユーザーとして実行すると、アプリケーションはそこに書き込むことができます。@Ken White は、これに関する既存の StackOverflow の回答への非常に優れたポインタを提供しました。

これがそのフォルダーに書き込む必要があるレガシ アプリケーションである場合は、logすべてのユーザーがフォルダーに書き込みできるように、フォルダーのアクセス許可を変更する必要があります。これは、Windows インストーラー (別名: MSI) で実行できますが、Visual Studio セットアップ プロジェクトがそれを公開しているかどうかはわかりません。WiX ツールセットは、そのようなことを確実にサポートしています。

于 2013-04-24T05:01:45.613 に答える
0

これは一般に、次のものに依存します。

  1. 他の理由でアプリを管理者として実行する必要があるかどうか..

  2. アプリが限定ユーザー向けに提供されているかどうか。

アプリが他の多くの理由で (制限された場所にあるファイルを更新するだけでなく) 昇格を必要とする場合、通常の方法はアプリに昇格マニフェストを埋め込むことです。これはセキュリティの観点からは良いことではありませんが、どうしても管理者権限が必要な場合は、この方法をお勧めします。

昇格を必要とする唯一の操作が Program Files フォルダー内のデータの更新/作成である場合は、そこにファイルを配置しないでください。私が見たすべてのケースは、コードがファイル名を参照するだけの遅延プログラミングであり、その結果、Program Files フォルダー (より正確には、アプリが実行されるフォルダーと同じフォルダー) に移動します。これを解決するには、データ ファイルを正しい場所 (ユーザーのアプリケーション データ フォルダーなど) に配置します。Rob Mensching が言うように、これが変更できないレガシー アプリである場合にのみ、インストール フォルダーのアクセス許可を変更する必要があります。

于 2015-05-06T18:16:48.837 に答える
0

古い投稿ですが、最近同様のことをする必要があったので、まだ有効だと思います! 私は悪い設計を主張しているわけではありませんが、現実の世界では、要求に応じなければならないことがあります。

アプリケーション フォルダーへの書き込みは、おそらく Win7 の下にあり、VS2010 によって作成された MSI のインストーラー クラスを介してこれを設定することが可能です。関連するグループを与える必要があるだけです (「ユーザー」グループを提案するか、誰が何を取得するかをより細かく制御したい場合は、選択画面を提供します) Write-Data アクセス。

パスで DirectoryInfo を使用すると、GetAccessControl からセキュリティ データを取得できます。グループを認識したら、グループの SID を取得し、必要な ControlType 値を提供する AddAccessRule も取得します。

次に、セキュリティ データ オブジェクトを使用して、DirectoryInfo オブジェクト (SetAccessControl) にアクセス制御を設定します。

PrincipalSearcher で検索を行うと、Groups プリンシパル オブジェクトから SID を取得できます。

お役に立てれば

ポール

于 2015-05-06T13:21:23.160 に答える