2

私はWindows7用のc#で非常にうまく機能するプログラムを書いています...しかし今、私はプログラムファイルを「C:\ProgramFiles」にコピーするセットアップを構築し始めました。

プログラムがそのフォルダにある場合、多くの問題が発生します。

1)OpenFileDialogをキャンセルすると、例外が発生します

2)私のプログラムはAppDataフォルダーにファイルを書き込みません

3)許可のため、プログラムは自身のディレクトリでインターンファイルを開くことができません

何ができるかわからない...

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

編集:

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

C:\myprogramで正常に動作するプログラムを作成しました。ファイルをC:\ Program Filesディレクトリにコピーするインストーラーを作成しました。これは、ファイルをそのディレクトリにコピーする場合と同じです。

  • 私のプログラムは自分のディレクトリにあるファイルだけを開きます
  • 私のプログラムはAppDataフォルダーを開いてファイルを書き込みます
  • 私のプログラムは、rtbで.txtのようなファイルを開くことができます。そこでOpenFileDialogが使用されます

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

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

プログラムをC:\ lalalaにインストールすると、機能します。

4

4 に答える 4

5

わかりました-私は答えを見つけました:

私は使用する必要があります

FileStream fs = File.OpenRead(tmpfile)

それ以外の

FileStream fs = new FileStream(tmpfile, FileMode.Open);
于 2009-06-14T20:38:43.580 に答える
1

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

于 2009-06-14T18:55:57.833 に答える
1

あなたは本当にウィンドウズインストーラープログラムを使うべきです。インスタレーションに関連する問題を処理し、必要な作業を行うために特権レベルが上げられていることを確認します。

プログラムがファイルシステムを見る方法を完全に変える可能性のある適切に昇格されていない場合、UACは舞台裏で多くのことを行います。

また、プログラムディレクトリにあるファイルを開く場合、それらのファイルは読み取り専用モードでのみ開くことができます。そうしないと、ファイル例外が発生します。

于 2009-06-14T19:19:02.880 に答える
1

または、これが機能しない場合('System.IO.FileStream'に1つの引数を取るコンストラクターが含まれていない場合)、次のことを試してください。

FileStream file = new FileStream(fileName、FileMode.Open、FileAccess.Read);

于 2012-02-06T14:17:38.580 に答える