2010-01-13 72 views
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

运行

例如这条线将导致一个错误:

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。它不限于桌面。

但只有它第一次运行(即在更新后立即)。此后它将运行良好。

如果进程失败的更加壮观,关于文件系统问题,锁或线程,这将是更容易理解。但为什么只有这个“我的名字空间”的“小问题”?

+1

你会得到什么错误? – SLaks 2010-01-13 21:03:37

+0

我向Q添加了一个示例错误 – hawbsl 2010-01-13 21:11:28

回答

2

我现在意识到这与复制的文件无关,一切都与一个执行不当的System.Security.Principal.WindowsImpersonationContext有关。

令人惊讶的是这些事情在发布后5分钟变得清晰。

相关问题