Winformアプリは、Main.exeとLauncher.exeで構成されています。Launcherアプリの目的は、Main.exeの更新されたバージョンを確認することです。
更新が見つからない場合は、System.Diagnostics.Process.Startを使用してMain.exeを起動します。
更新が見つかった場合は、新しいMain.exeを所定の位置にコピーし、同じ方法でMain.exeを起動します(この場合、Main.exeの新しいコピーになります)。
Process.Startコードは次のとおりです。
Dim p As New ProcessStartInfo
p.FileName = "Main.exe"
p.WindowStyle = ProcessWindowStyle.Normal
Process.Start(p)
このコードは、更新があったかどうかに関係なく実行され、常にMain.exeを正常に起動します。
ただし、Main.exeを初めて実行する場合(つまり、更新後)は、My.SettingsやMy.Computer.FileSystemなどのMy名前空間を参照するすべての行でエラーが発生します。
たとえば、この行はエラーを引き起こします:
Msgbox(My.Computer.FileSystem.SpecialDirectories.Desktop)
エラーは次のとおりです。
System.IO.DirectoryNotFoundException:特別なディレクトリ「デスクトップ」が見つかりませんでした。Microsoft.VisualBasic.FileIO.SpecialDirectories.GetDirectoryPath(String Directory、String DirectoryNameResID)、Microsoft.VisualBasic.FileIO.SpecialDirectories.get_Desktop()、Microsoft.VisualBasic.MyServices.SpecialDirectoriesProxy.get_Desktop()
ただし、この例はデスクトップを参照していますが、SpecialDirectoriesが見つからないことを忘れないでください。デスクトップに限定されません。
ただし、初めて実行する場合(つまり、更新直後)のみです。その後は正常に動作します。
ファイルシステムの問題、ロック、またはスレッドを処理するために、プロセスがより見事に失敗した場合は、より理解しやすくなります。しかし、なぜMy名前空間に関するこの「マイナーな」問題があるのでしょうか。