【发布时间】:2017-03-30 17:41:24
【问题描述】:
短篇小说
我有一个奇怪的问题,在互联网上找不到任何解决方案。
这对于一个问题可能并不重要,但我更愿意提到我有两个独立的项目,并决定将它们组合成一个解决方案。这两个项目都是简单的winform应用程序。它们在编译后分别工作:在调试期间直接在 Visual Studio 中(无论是在调试还是发布模式下),在本地调试器外部以及在将它们复制到本地网络上的某个文件夹之后。
但是在合并它们之后,其中一个应用程序在从网络启动时停止工作。
停止工作意味着什么?
我将调试器附加到已经运行的进程并发现:
-
frmMain.Designer.vbPartial Class frmMainPrivate Sub InitializeComponent()中的代码可以正常工作。这可以通过在Sub开头设置断点并逐步执行代码直到End Sub进行检查。 -
frmMain.vb中Public Class frmMain中Private 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开始转到共享网络驱动器上应用程序的最终位置并从那里启动应用程序 - 它可以工作。- 但是,如果通过
\\server\share-name\folder选择相同的最终目的地并从那里启动应用程序 - 它不起作用。 - 如果应用程序通过桌面上的快捷方式启动,并且在此应用程序的快捷方式
target path中以两种方法之一定义,则第 6 点和第 7 点的作用相同。
Windows 7、.Net Framework 4.5。
你知道如何解决它以及错误在哪里吗?
【问题讨论】:
-
你是在派生你的课程还是类似的东西?看起来您几乎合并了项目,但代码仍在使用对 DLL 的引用。
-
有两个不同的权限集可能是原因。 “NTFS”权限将使您可以像在计算机上一样访问目录,但共享文件夹权限不同。问题可能是用户无法通过共享访问应用程序所需的所有文件夹/文件,但他们可以通过 NTFS 访问。第二个潜在问题可能是您构建文件路径的方式,但如果没有任何代码,就很难说出任何事情。
-
我相信 .NET 程序在不同的 CAS 策略下运行,具体取决于它们的启动位置。您可以尝试here 中提到的配置设置,看看它是否对您有帮助。
-
@Juan @ps2goat 不,我没有得到任何东西。这些应用程序在他们独自一人时可以工作,无论它们是如何启动的以及由谁启动的。我自己从资源管理器启动应用程序时遇到问题,该应用程序通常使用服务器路径而不是映射路径打开。这些以前可以工作,因为它们不是 1.0.0.0 版...我现在通过修改所有用户的快捷方式来修复这种情况,方法是通过
Y:` not\\sever` 修改目标路径。我不知道为什么代码不会从InitializeComponent切换到MyBase.Load。 -
@Bradley Uffner 明天上班我会检查它,因为在花了几个小时试图找到根本原因后我一无所知。谢谢。我会通知你的。
标签: c# vb.net forms winforms unc