none
ファイルを作成で「アクセスが拒否されました」。 RRS feed

  • 質問

  • OSはWindows7でVisual Studio 2008、C#を利用して

    Program Files或いはProgram Files(x86)フォルダー下にあるフォルダーにファイルを作成しようとしていますが
    「アクセスが拒否されました」。

    string filePath = @"C:\\Program Files (x86)\test\test.txt";
    using (StreamWriter sr = new StreamWriter(filePath, true, Const_Encoding))
    { }

    解決策を教えてください。

    よろしくお願いします。
    2009年12月7日 8:06

回答

  • 次の URL の記事が参考になるのですが、

     リソースの管理 - Windows 7 対応アプリケーションの互換性
     http://msdn.microsoft.com/ja-jp/windows/dd882533.aspx
     (「リソース管理への対応」の項)

    セキュリティ上の理由により Windows 7 では標準ユーザーには Program Files への書き込み権限がありません。
    アプリケーションを管理者として実行するとか、アプリケーション マニフェストで管理者権限を要求するとかしないといけません。
    次の URL の記事が参考になると思います。

     リソースの管理 - Windows 7 対応アプリケーションの互換性
     http://msdn.microsoft.com/ja-jp/windows/dd882533.aspx

    Program Files 以下にはファイルを書かない、というのが本当は望ましいのかもしれませんが。
    2009年12月7日 8:56
  • マルチポストのようですので繋げておきます。

    http://social.answers.microsoft.com/Forums/ja-JP/w7filesja/thread/7333d51a-f8db-4164-b87e-ed5a2b01245f
    http://bbs.wankuma.com/index.cgi?mode=al2&namber=44373
    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2009年12月7日 14:01
    モデレータ
  • なお、他の掲示板でもここでも既に回答がついていますが、安易に管理者として実行で済まさないでください。
    本当に Program Files にファイルを書き込まないといけないのか、きちんと要件を確認してください。

    現状ですと、管理者権限を持たない人は利用できません。
    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2009年12月7日 14:02
    モデレータ

すべての返信

  • 次の URL の記事が参考になるのですが、

     リソースの管理 - Windows 7 対応アプリケーションの互換性
     http://msdn.microsoft.com/ja-jp/windows/dd882533.aspx
     (「リソース管理への対応」の項)

    セキュリティ上の理由により Windows 7 では標準ユーザーには Program Files への書き込み権限がありません。
    アプリケーションを管理者として実行するとか、アプリケーション マニフェストで管理者権限を要求するとかしないといけません。
    次の URL の記事が参考になると思います。

     リソースの管理 - Windows 7 対応アプリケーションの互換性
     http://msdn.microsoft.com/ja-jp/windows/dd882533.aspx

    Program Files 以下にはファイルを書かない、というのが本当は望ましいのかもしれませんが。
    2009年12月7日 8:56
  • 教えてくれたみなさん、ありがとうございます。
    「管理者として実行」すると解決できました。
    2009年12月7日 10:42
  • マルチポストのようですので繋げておきます。

    http://social.answers.microsoft.com/Forums/ja-JP/w7filesja/thread/7333d51a-f8db-4164-b87e-ed5a2b01245f
    http://bbs.wankuma.com/index.cgi?mode=al2&namber=44373
    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2009年12月7日 14:01
    モデレータ
  • なお、他の掲示板でもここでも既に回答がついていますが、安易に管理者として実行で済まさないでください。
    本当に Program Files にファイルを書き込まないといけないのか、きちんと要件を確認してください。

    現状ですと、管理者権限を持たない人は利用できません。
    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2009年12月7日 14:02
    モデレータ
  • フォーラムオペレーターの高橋春樹です。

    totojoさん、Azuleanさん、こんにちは。
    アドバイスありがとうございました。
    また、スレッドのリンクを張って頂き、有難うございます。
    投稿の分散がなくなるので、大変助かります。

    質問者(は)さん、初めまして。
    MSDNフォーラムのご利用ありがとうございます。
    皆さんのご指摘にもあるように、Program Files配下にファイルを吐き出すのは
    あまり良いプログラムとは言えないと思います。
    (インストール時に設定するものであれば、良さそうなのですが・・・)

    totojoさんからご紹介のあったサイトの"リソース管理への対応"を、もう一度確認し
    ファイルの出力先を再考慮して頂きたいと思います。

    リソース管理への対応
    適切なリソースを使用する
    フォルダーやレジストリにアクセスするときには、適切なフォルダーを選択する必要があります。
    標準ユーザーには Program Files フォルダーなどへの書き込み権がありません。
    そのため、これらのフォルダーにアプリケーションから一時的に利用するファイルを追加していると、
    エラーが起こってしまいます。実行に必要な情報は、できるだけユーザーごと、
    つまり「Users\<username>」などに保存するようにします。

    今回、totojoさんとAzuleanさんからの投稿が有用な情報だと思いましたので、
    勝手ながら、回答マークを付けさせて貰いました。

    今後ともMSDNフォーラムをよろしくお願いします。


    マイクロソフト株式会社 フォーラム オペレーター 高橋春樹
    2009年12月14日 5:34