我们的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
运行例如这条线将导致一个错误:
Msgbox(My.Computer.FileSystem.SpecialDirectories.Desktop)
这里的错误:
System.IO.DirectoryNotFoundException: Could not find special directory 'Desktop'. at Microsoft.VisualBasic.FileIO.SpecialDirectories.GetDirectoryPath(String Directory, String DirectoryNameResID) at Microsoft.VisualBasic.FileIO.SpecialDirectories.get_Desktop() at Microsoft.VisualBasic.MyServices.SpecialDirectoriesProxy.get_Desktop()
不过,虽然这个例子是指桌面记住它找不到任何的SpecialDirectories。它不限于桌面。
但只有它第一次运行(即在更新后立即)。此后它将运行良好。
如果进程失败的更加壮观,关于文件系统问题,锁或线程,这将是更容易理解。但为什么只有这个“我的名字空间”的“小问题”?
你会得到什么错误? – SLaks 2010-01-13 21:03:37
我向Q添加了一个示例错误 – hawbsl 2010-01-13 21:11:28