短篇小说
我有一个奇怪的问题,无法在互联网上找到任何解决方案。
这对于一个问题来说可能并不重要,但我更愿意提到我有两个单独的项目,并决定将它们合并为一个解决方案。这两个项目都是简单的通知应用程序。它们在编译后单独工作:在调试期间直接在Visual Studio中工作(无论是在调试模式下还是在发布模式下),在调试器外部本地工作,并将它们复制到本地网络上的某个文件夹中。
但是,在合并它们后,其中一个应用程序在从网络启动时停止工作。
停止工作意味着?
我将调试器附加到已经在运行的进程,发现:
frmMain.Designer.vb
inPartial Class frmMain
inPrivate Sub InitializeComponent()
中的代码工作正常。这是通过在Sub
开始时创建一个断点并逐步完成代码直到End Sub
来检查的。- 不会触发
frmMain.vb
inPublic Class frmMain
inPrivate Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
中的代码。从InitializeComponent()
(点 1)出去后,代码不输入frmMain_Load
。主窗体显示在屏幕上,其中包含所有控件,但未初始化/清理,没有图标等。 - 单击主窗体上的某些按钮可以打开子窗体,但它们也没有初始化/清理。
通过单击"X"关闭子窗体不会关闭窗体(通常会关闭)。单击同一子窗体上的
cmdClose
按钮将关闭该窗体。按钮DialogResult
属性设置为Cancel
。窗体本身CancelButton
属性设置为cmdClose
。按ESC
也会关闭窗体。Private Sub cmdClose_Click(sender As Object, e As EventArgs) Handles cmdClose.Click Me.Dispose() End Sub
关闭主窗体(无论是通过"X"、
cmdClose
按钮还是ESC
)都会挂起应用程序。Private Sub cmdClose_Click(sender As Object, e As EventArgs) Handles cmdClose.Click Me.Close() End Sub
如果我打开Windows资源管理器并从映射的驱动器
Y:folder
开始转到共享网络驱动器上应用程序的最终位置,然后从那里启动应用程序 - 它可以工作。- 但是,如果通过
\servershare-namefolder
选择相同的最终目的地并从那里开始应用程序 - 它不起作用。 - 如果应用程序由桌面上的快捷方式启动,则第 6 点和第 7 点的作用相同,并且在此快捷方式中,应用程序的
target path
是用两种方法之一定义的。
Windows 7,.Net Framework 4.5。
您是否知道如何解决它以及错误在哪里?
错误解释
我决定从应用程序可执行文件中提取图标,而不是像以前那样从资源中提取图标,以避免向可执行文件添加两次相同的图标文件:首先作为添加到项目/属性/应用程序/图标中的应用程序图标,第二次作为添加到项目/属性/资源中的表单图标。
问题是,如果在代码的任何地方(在我的示例中Private Sub form_Load(sender As Object, e As EventArgs) Handles MyBase.Load
)添加
Me.Icon = Icon.ExtractAssociatedIcon(Assembly.GetExecutingAssembly().Location)
它不适用于返回的 UNC 路径
System.ArgumentException
The filePath does not indicate a valid file or the filePath indicates a Universal Naming Convention (UNC) path.
窗体关闭后运行时发生错误。方法
Assembly.GetExecutingAssembly().Location
返回正确的路径(例如字符串\servershare-namefolder
)但方法
Public Shared Function ExtractAssociatedIcon(filePath As String) As Icon
不接受 UNC 路径。
溶液
为了解决这个问题,这里和这里提出了2个笨拙的解决方案。