Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 应用程序在本地启动或从映射的网络驱动器(但不是从UNC路径)启动时工作 短篇小说_C#_Vb.net_Forms_Winforms_Unc - Fatal编程技术网

C# 应用程序在本地启动或从映射的网络驱动器(但不是从UNC路径)启动时工作 短篇小说

C# 应用程序在本地启动或从映射的网络驱动器(但不是从UNC路径)启动时工作 短篇小说,c#,vb.net,forms,winforms,unc,C#,Vb.net,Forms,Winforms,Unc,我有一个奇怪的问题,在互联网上找不到任何解决办法 这对于一个问题来说可能并不重要,但我更愿意提到我有两个独立的项目,并决定将它们合并到一个解决方案中。这两个项目都是简单的winform应用程序。编译后,它们分别工作:在调试期间直接在Visual Studio中(无论是在调试模式还是发布模式下),在调试器外部本地工作,以及在将它们复制到本地网络上的某个文件夹后工作 但是,在合并它们之后,其中一个应用程序在从网络启动时停止工作 停止工作意味着什么? 我将调试器附加到已经运行的进程,并发现: frmM

我有一个奇怪的问题,在互联网上找不到任何解决办法

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

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

停止工作意味着什么? 我将调试器附加到已经运行的进程,并发现:

  • frmMain.Designer.vbinPartial Class frmMaininPrivate Sub InitializeComponent()中的代码工作正常。这是通过在
    Sub
    的开始处设置断点并逐步遍历代码直到
    End Sub
    来检查的
  • frmMain.vbinPublic Class frmMaininPrivate Sub frmMain\u Load(发送方作为对象,e作为事件参数)中的代码处理MyBase。不会触发加载。从
    InitializeComponent()
    (第1点)退出后,代码不会进入
    frmMain\u Load
    。主窗体与所有控件一起显示在屏幕上,但未初始化/清理,没有图标等
  • 单击主窗体上的一些按钮可以打开子窗体,但它们也未初始化/清理
  • 单击“X”关闭子窗体不会关闭窗体(通常会关闭)。单击同一子窗体上的
    cmdClose
    按钮关闭窗体。按钮的
    对话框结果
    属性设置为
    取消
    。表单本身的
    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:\文件夹开始,转到共享网络驱动器上应用程序的最终位置,然后从该位置启动应用程序,则会正常工作

  • 但是,如果通过
    \\server\share name\folder
    选择相同的最终目的地,并从那里启动应用程序,则无法运行
  • 如果应用程序是通过桌面上的快捷方式启动的,并且在该快捷方式中,通过两种方法之一定义了应用程序的目标路径,则第6点和第7点的作用相同 Windows7、.NETFramework 4.5

    您是否知道如何解决此问题以及错误在哪里?

    错误说明 我决定从应用程序可执行文件中提取图标,而不是像以前那样从资源中提取图标,以避免向可执行文件中添加两次相同的图标文件:第一次作为应用程序图标添加到Project/Properties/application/icon中,第二次作为表单图标添加到Project/Properties/Resources中

    问题是,如果在代码中的任何地方(在我的示例中,在
    私有子表单中),Load(sender作为对象,e作为EventArgs)处理MyBase.Load
    )您添加了

    当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路径

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

    您是在派生类还是类似的东西?看起来您几乎合并了这些项目,但代码仍在使用对DLL的引用。原因可能是两个不同的权限集。“NTFS”权限将使您能够像在计算机上一样访问目录,但共享文件夹权限不同。问题可能是用户无法通过共享访问应用程序所需的所有文件夹/文件,但他们可以通过NTFS访问。第二个潜在问题可能是在构建文件路径的方式上,但是如果没有任何代码,就很难分辨出任何东西。我相信.NET程序会根据不同的CAS策略运行,具体取决于它们从何处开始。您可以尝试上面提到的配置设置,看看它是否对您有帮助。@Juan@ps2goat不,我没有派生任何东西。无论这些应用程序是如何启动的,由谁开发的,它们在单独使用时都能正常工作。我自己在从资源管理器启动应用程序时遇到问题,资源管理器通常使用服务器路径而不是映射路径打开。这些都是以前的工作,因为它们不是版本1.0.0.0。。。我通过修改路径到target by
    Y:`not
    \\sever`,改变了所有用户的快捷方式,暂时解决了这个问题。我不明白为什么代码不能从
    InitializeComponent
    切换到
    MyBase.Load
    @Bradley Uffner明天上班时,我会检查它,因为我花了几个小时试图找到根本原因,但毫无线索。谢谢我会通知你的。
    Public Shared Function ExtractAssociatedIcon(filePath As String) As Icon