为什么“我的”命名空间不可用?

时间:2010-01-13 21:01:11

标签: vb.net winforms auto-update my-namespace

我们的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命名空间的行上出错,例如My.Settings或My.Computer.FileSystem

例如,这一行会导致错误:

Msgbox(My.Computer.FileSystem.SpecialDirectories.Desktop)

这是错误:

  

System.IO.DirectoryNotFoundException:   找不到特殊目录   '桌面'。在   Microsoft.VisualBasic.FileIO.SpecialDirectories.GetDirectoryPath(字符串   目录,字符串DirectoryNameResID)   在   Microsoft.VisualBasic.FileIO.SpecialDirectories.get_Desktop()   在   Microsoft.VisualBasic.MyServices.SpecialDirectoriesProxy.get_Desktop()

但是虽然这个例子引用了Desktop,但是记住它找不到任何的SpecialDirectories。它不仅限于桌面。

但只是第一次运行(即更新后立即)。此后它会运行良好。

如果进程失败更加严重,与文件系统问题,锁或线程有关,那将更容易理解。但为什么只有My命名空间的这个“次要”问题?

1 个答案:

答案 0 :(得分:2)

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

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