繁体   English   中英

从本地启动或从映射的网络驱动器启动但从UNC路径启动时,应用程序无法运行

[英]Application works when started locally or from mapped network drive but not from UNC path

短篇故事

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

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

但是,合并它们后,其中一个应用程序从网络启动时便停止工作。

停止工作意味着什么?

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

  1. Private Sub InitializeComponent() Partial Class frmMain中的frmMain.Designer.vb中的代码可以正常工作。 通过在Sub的开头创建一个断点并逐步遍历代码直到End Sub
  2. Public Class frmMain frmMain.vb中的代码, Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load Public 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 窗体本身具有设置为cmdClose CancelButton属性。 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

Windows 7,.Net Framework 4.5。

您是否有解决方法以及错误在哪里的线索?

错误说明

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

问题是,如果在代码的任何位置(在我的示例中为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路径。

为了解决这个问题, 这里这里提出两种笨拙的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM