2009-06-14 5 views
2

私は非常に細かく動作するWindows7のためのC#でプログラムを書いています... しかし、私はプログラムファイルを "C:\ Program Files"にコピーするセットアップを構築し始めました。私はOpenFileDialogをキャンセルした場合、私は例外にファイルを書き込みませんc#win7:unauthorizedaccessexception

2)私のプログラムを取得します)

1:プログラムが、そのフォルダにあるとき

は今、多くの問題がありますAppDataフォルダもう

3)プログラムは私が何ができるかわからないので許可

の独自のディレクトリにインターンのファイルを開くことができません...

誰かが私を助けることができますか?

EDIT:

たぶん、あなたは私の問題を理解していませんでした。

私はC:\ myprogramでうまく動作するプログラムを書いています。 は、私はCにコピーファイルがインストーラ作っ:私はそのディレクトリ

  • 私のプログラムに私のファイルをコピーする場合、\ Program Filesディレクトリが、それは同じだだけその独自のディレクトリにファイルを開くを
  • 私のプログラムAppDataフォルダにファイルを開き、書き込み
  • 私のプログラムはRTBでの.txtのようなファイルを開くことができます。 OpenFileDialogが使用されます

この3つのポイントは機能しません!

私のプログラムがProgram Filesフォルダにある場合、C:\ Program Files \ myprogram \ xsl \ test.xslのようなファイルを開くことはできず、ファイルをAppDataフォルダに書き込むことはできません。

私のプログラムをC:\ lalalaにインストールするとうまくいきます!

答えて

5

[OK]を、私は答えを見つけました。 IO.FileStream 'には1つの引数を取るコンストラクタが含まれていません)、次にこれを試してください:

FileStream file =新しいFileStream(fileName、FileMode.Open、FileAccess.Read);

1

ファイルをプログラムファイルまたは任意の特権のある場所にコピーするには、昇格した管理者がプロセスを実行する必要があります。ファイルと "OpenFileDialog"を "コピー"することについて話しているので、Windowsインストーラではなく、コピーを実行する.NETプロセスを実行しているように聞こえます。通常、これはアプリではなくインストーラで行う必要があります。あなたのアプリケーションはマニフェストにrequireAdministratorを設定するか、その特定のアクションのために昇格させる必要があります。詳細については、UACをお読みください。はじめに、私はCodePlexでUAC: The Definitive Guideを読むことをお勧めします。

1

あなたは本当にWindowsインストーラプログラムを使用する必要があります。それは遭遇に関連する問題を処理し、必要な作業を行うために特権レベルが上昇していることを確認します。

あなたが正しく昇格していないと、UACはあなたのプログラムがファイルシステムを見ている様子を完全に変えることができます。

また、プログラムディレクトリにあるファイルを開くと、それらのファイルを読み取り専用モードで開くことも、ファイル例外を取得することもできます。私はこれ以上のソリューションが動作しない場合は '(あるいは、

FileStream fs = File.OpenRead(tmpfile) 

代わり

FileStream fs = new FileStream(tmpfile, FileMode.Open); 
1

のシステムを使用する必要が

: -

関連する問題