0

ユーザーがフォルダパスを選択できるWPFアプリケーションを開発しました。WPFアプリケーションは、この選択されたパスにファイル/データを書き込みます。パスとして「C:\ ProgramData」を選択すると、ファイルが作成され、データが書き込まれます。ただし、パスが「C:\ ProgramData」以外の場合、ファイルは生成されますが、データがファイルに書き込まれず、アクセス許可の問題のようです。「C:\ ProgramData」と同じ選択したフォルダに同じ種類のアクセス許可を割り当てて、ファイルにデータを書き込めるようにする方法を誰かが見つけてくれるでしょうか。結論として、「ProgramData」には他のフォルダ用ではない追加の権限は何ですか?

注:ProgramDataフォルダーでのみ正しく機能します。

4

3 に答える 3

1

アプリケーションが標準ユーザー権限で起動された場合は常に、標準ユーザーが書き込みできるフォルダーにのみ書き込むことができます。例は次のとおりです。

  1. C:\ユーザー\ユーザー名\
  2. C:\プログラムデータ\
  3. D:\

次のようなフォルダーに書き込むことはできません。

  1. C:\
  2. C:\Users\SOME_OTHER_USERNAME\
  3. c:\Windows
  4. C:\Windows\System32 など

そのためには、UAC を無効にするか、管理者権限でアプリケーションを起動する必要があります。

ユーザーがアプリケーションからフォルダーを選択するたびに、パスを受け入れる前に、その場所にファイル/フォルダーを作成できるかどうかを確認することをお勧めします。

于 2012-12-13T05:24:50.490 に答える
0

@Ganeshは正しいですが、次のオプションのいずれかを使用できます。

  1. 管理者権限でインストーラーを実行し、インストール中にターゲット フォルダーを選択するようにユーザーに依頼し、すべてのユーザーまたはユーザー/ロールの必要なグループにアクセス許可を設定します。
  2. 上記が当てはまらない場合は、アプリケーションを常に管理者アカウントで実行するように構成してください。そうすれば、データを書き込むためにすべてのフォルダーにアクセスできます。ここで説明されているように、管理者ユーザー アプリケーション マニフェストとして実行を構成するには:
  3. ただし、推奨される方法ではありませんが、UAC をオフにします。

私は同じ問題を抱えていたので、インストーラーを管理者権限で強制的に実行し、インストール中にターゲットフォルダーを作成するようにユーザーに依頼しました。カスタム アクションを使用して、ターゲット フォルダのすべてのユーザー グループに完全な権限を設定しました。私たちにとってセキュリティは問題ではなかったので、このオプションを使用する前に環境を考慮して、全員を許可しても問題ありませんでした。

于 2012-12-13T07:18:40.790 に答える
0

私ができる解決策は、フォルダーパスを取得した後、ユーザーがパスを選択できるようにすることです。データを書き込むことができるかどうかを確認してください。このコードを参照してください

    bool HasAccessToWrite(string path)
    {
        try
        {
            using (FileStream fs = File.Create(Path.Combine(path, "Access.txt"), 1, FileOptions.DeleteOnClose))
            {
            }
            return true;
        }
        catch
        {
            return false;
        }
    }
于 2012-12-13T06:54:47.863 に答える