1

あなたがインストールする必要のない小さなプログラムを作りました。したがって、ヘルプを表示したい場合は、それをリソースから抽出する必要があります。これはうまく機能し、このファイルへのパスを保存します。

次に、ShowHelp を呼び出すときに、抽出したファイルへのパスを渡します。クロージングイベントで、このファイルを削除しようとしましたが、ここに問題があります。

私が使うとき

Help.ShowHelp(this,pathToChmFile);

それはうまく機能し、ファイルを削除できますが、このようにtopicIdさえ渡すと

Help.ShowHelp(this, pathToChmFile, HelpNavigator.TopicId, "10");

FormClosing が呼び出されると、自分のプロセスによって開かれているため、chm ファイルを削除できません。しかし、topicId なしで表示すると、なぜ削除できるのでしょうか?

プログラムをアンインストールできないので、自分で「ゴミ」をきれいにしたいのですが、今はできません...

4

1 に答える 1

1

このシナリオでごみを作成することは、かなり避けられません。ファイルが削除されることを保証することはできません。1 つには、ユーザーは通常、クラッシュが多すぎるとプログラムをアンインストールします。リソースを EXE と同じディレクトリに抽出することはできません。通常のインストール場所は、書き込みのためにプログラムにアクセスできません。UAC はこれを停止します。ユーザーは、EXE をコピーするときに昇格するように求められますが、自分のアクションに対してはそのようなプロンプトは提供されません。%AppData% または TEMP フォルダーに抽出する必要があります。ユーザーがファイルを見つけることはありません。少なくとも TEMP から古いジャンクを削除するメカニズムがあるため、Path.GetTempPath() を使用することをお勧めします。

別の場合、ロックも避けられず、別のプロセスによって保持されます。Windows hh.exe プログラムは、.chm ファイルの内容を表示します。ユーザーがプログラムを終了した後、最初にヘルプ ビューアを閉じなかった場合にできる合理的なことは何もありません。hh.exe の正しいインスタンスを見つけて強制終了する信頼できる方法はありません。複数存在する可能性があります。

したがって、ゴミにこだわっています。 Path.GetTempPath() は最も不快ではありません。.chm ファイルを EXE と同じディレクトリに展開しない限り。.zip ファイルからでない場合、setup.exe プログラムの作成は Setup プロジェクトで非常に簡単です。問題を解決し、ユーザーを快適にする 1 つのことをスキップしないでください

于 2012-08-04T16:22:46.133 に答える