私には、アップデータが組み込まれたfoo.exeというアプリケーションがあります。サーバーに接続し、更新プログラムがあれば現在の(実行中の)アプリケーションの名前をfoo.exe.bakに変更し、foo.exeをダウンロードしてApplication.Restart
と呼ぶと、新しいバージョンのfoo.exeが起動します。これはうまくいくようです...ほとんどの時間。私がそれを実行する1台のコンピュータは常にそうであるように見えますが、時には新しいバージョンをダウンさせるが古いバージョンをロードすることもあります。 Application.Restart
を呼び出すボタンを使用してアプリケーションを再起動すると、正しいバージョンが表示されます。VB.NET Application.Restartの動作 - 予期しない結果
この再起動に失敗したときに、ローカルシステム上のファイルは1.2であり、サーバー上では1.2ですが、実行中のバージョンは今更新した1.1です。最新の実行可能バージョンと同様に、DLLアップデートのチェックを可能にするために、最近アップデータが調整されているため、実行中のアプリケーション(1.1)のバージョンを期待バージョンと比較してexeファイルのバージョン(1.2)バージョンの不一致のために別のアップデートを引き起こさない。結局のところ、私のアプリケーションは、それが更新されたバージョンだと信じているところで間違った側の失敗をしていることになります。
私は再起動を呼び出す前に1秒の遅延がありました。これを5に増やしても、問題を修正することはありませんでした。 Application.Restart
はどのように機能していますか? 私はShell(Application.ExecutablePath)
Application.Exit
を試しましたが、それはうまくいかず、アプリケーションを終了させるだけでした。私のアプリケーションを閉じてfoo.exeを再起動する信頼できる方法はありますか?
おかげ
マルウェア対策は、常にあなたに片頭痛を与えることです。彼らは決してどこからも見えない実行可能ファイルを好むことは決してありません。優しそうな人たちは、スキャンするために楽しい時間を過ごし、まだそこにないように見せます。しかし、なぜそれが.bakファイルを実行できるのかを簡単に説明できません。これらの操作のいずれかが失敗するたびに、大声で十分に叫んでください。ユーザーアカウントには、インストールディレクトリにファイルの名前を変更したり作成するのに十分な権限がありません。 UACは通常の場合、* c *¥program filesを保護します。 –
** foo.exe **ファイルで 'Process.Start()'を使ってみましたか?そして今すぐ(**)** foo.exe.bak **ファイルから抜けてしまいましたか?黙って再起動するのを避けてください。また、可能であれば、おそらくClickOnceの仕事です。 –
ハンス:私が問題を抱えているデバイスでは、テスト中にソフトウェアがc:\ fooにあります。伝統的にはインストールされていません。 ファイルの名前を変更し、新しいDLLをそのフォルダにダウンロードし、新しい実行可能ファイルをダウンロードします。もしそれが権利問題であったなら、私はそれらも失敗することを期待するでしょう。私は、マルウェア対策の対話を見ていきます。私の最初の考えは、Application.Restart()が実行中のものを再ロードしている可能性がありますが、それは2番目の呼び出しで動作することを説明しませんでした。 ありがとう –