应用程序在本地或从映射的网络驱动器启动时工作,但不从UNC路径

时间:2017-03-30 17:41:25

标签: c# vb.net forms winforms unc

短篇小说

我有一个奇怪的问题,无法在互联网上找到任何解决方案。

这对于一个问题可能并不重要,但我更愿意提到我有两个独立的项目,并决定将它们合并为一个解决方案。这两个项目都是简单的winform应用程序。它们在编译后单独工作:在调试期间直接在Visual Studio中(无论是在调试模式还是发布模式下),本地调试器外部以及将它们复制到本地网络上的某个文件夹之后。

然而,在合并它们之后,其中一个应用程序在从网络启动时停止工作。

停止工作意味着什么?

我将调试器附加到已经运行的进程并发现:

  1. frmMain.Designer.vb Partial Class frmMain Private Sub InitializeComponent()中的代码正常运行。通过在Sub开头创建一个断点并逐步完成代码直到End Sub来检查。
  2. frmMain.vbPublic Class frmMain Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load中的代码未被触发。从InitializeComponent()(第1点)出发后,代码不会输入frmMain_Load。主屏幕显示在屏幕上,包含所有控件,但没有初始化/清理,没有图标等。
  3. 点击主表单上的某些按钮可以打开子表单,但它们也没有初始化/清理。
  4. 点击" X"关闭儿童表格不关闭表格(通常是这样)。单击同一子表单上的cmdClose按钮将关闭表单。按钮的DialogResult属性设置为Cancel。表单本身的CancelButton属性设置为cmdClose。按ESC也会关闭表单。

    Private Sub cmdClose_Click(sender As Object, e As EventArgs) Handles cmdClose.Click
        Me.Dispose()
    End Sub
    
  5. 关闭主表单(无论是通过" X",cmdClose按钮还是ESC)都会挂起应用程序。

    Private Sub cmdClose_Click(sender As Object, e As EventArgs) Handles cmdClose.Click
        Me.Close()
    End Sub
    
  6. 如果我打开Windows资源管理器并从映射的驱动器Y:\folder开始到共享网络驱动器上的应用程序的最终位置并从那里启动应用程序 - 它可以正常工作。

  7. 但是,如果通过\\server\share-name\folder选择相同的最终目的地并从那里开始申请 - 它就无法运作。
  8. 如果应用程序由桌面上的快捷方式启动,则第6点和第7点的行为相同,并且在此快捷方式target path中,应用程序在两种方法之一中定义。
  9. Windows 7,.Net Framework 4.5。

    您是否有任何线索如何解决它以及错误的位置?

1 个答案:

答案 0 :(得分:0)

错误说明

我决定从应用程序可执行文件中提取图标而不是之前的资源,以避免将相同的图标文件添加到可执行文件中两次:首先作为应用程序图标添加到Project / Properties / Application / Icon中作为Project / Properties / Resources中添加的表单图标。

问题是,如果在代码的任何地方(在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

返回正确的路径(例如字符串,例如\\server\share-name\folder)但方法

Public Shared Function ExtractAssociatedIcon(filePath As String) As Icon

不接受UNC路径。

解决方案

为了解决这个问题,提出了2个笨拙的解决方案herehere