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

发布于 2024-08-17 23:01:03 字数 1186 浏览 7 评论 0原文

我们的 Winform 应用程序由 Main.exe 和 Launcher.exe 组成。 Launcher 应用程序的目的是检查 Main.exe 的更新版本。

如果没有发现更新,则使用 System.Diagnostics.Process.Start 启动 Main.exe

如果发现更新,则将新的 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()

但是,虽然此示例引用桌面,但请记住它找不到任何 SpecialDirectories。它不限于桌面。

但仅限第一次运行时(即更新后立即运行)。此后它将运行良好。

如果该过程因文件系统问题、锁或线程而失败得更严重,那就更容易理解了。但为什么 My 命名空间只有这个“小”问题呢?

Our Winform app consists of a Main.exe and a Launcher.exe. The purpose of the Launcher app is to check for updated versions of the Main.exe.

If it finds no updates it launches Main.exe using System.Diagnostics.Process.Start

If it finds an update, it copies the new Main.exe into position and launches Main.exe the same way (in this case it will be a fresh copy of Main.exe).

Here's the Process.Start code:

Dim p As New ProcessStartInfo
p.FileName = "Main.exe"
p.WindowStyle = ProcessWindowStyle.Normal
Process.Start(p)

This code executes whether or not there's been an update and always successfully fires up Main.exe.

However our Main.exe, if it's being run for the first time (ie. after an update), will error on any line which references the My namespace, such as My.Settings or My.Computer.FileSystem

For example this line will cause an error:

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

Here's the error:

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()

But while this example refers to Desktop remember it can't find any of the SpecialDirectories. It's not restricted to Desktop.

But only the first time it's run (ie. immediately after an update). Thereafter it will run fine.

If the process failed more spectacularly, to do with file system issues, locks or threads, it would be more understandable. But why just this "minor" problem with the My namespace?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

青巷忧颜 2024-08-24 23:01:03

我现在意识到这与复制的文件无关,而与实施不当的 System.Security.Principal.WindowsImpersonationContext 有关。

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

I realise now it was nothing to do with the copied file and everything to do with a badly implemented System.Security.Principal.WindowsImpersonationContext.

Amazing how these things become clear 5 minutes after posting.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文