1

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名前空間に関するこの「マイナーな」問題があるのでしょうか。

4

1 に答える 1

2

私は今、それがコピーされたファイルとは何の関係もなく、正しく実装されていないSystem.Security.Principal.WindowsImpersonationContextと関係があることに気づきました。

投稿から5分後にこれらのことが明らかになるのは驚くべきことです。

于 2010-01-13T21:35:45.233 に答える