问题:.NET 代码从同一个磁盘上的一个目录运行,但不能从另一个目录运行

StackOverflow https://stackoverflow.com/questions/126228

  •  02-07-2019
  •  | 
  •  

我们的应用程序是混合 Win32 非托管应用程序和 .NET 2.0 托管应用程序。Win32 部分是主要的可执行文件,它在某些时候加载和托管 .NET 2.0 运行时,并加载一些托管模块以打开新的 winforms 窗口。

我们也遇到过 CASPOL 类型的问题,但今天我们遇到了一个非常奇怪的问题,我希望有人能给我一些指示或想法,或者基本上任何真正的东西,这会引发一些有助于帮助我的东西的火花我们解决这个问题。

在通过 Citrix 访问的服务器上,如果应用程序文件位于当前登录用户(服务器/域管理员)桌面上的目录中,则程序运行正常。.NET 窗口按预期打开。

但是,如果我们将目录移动到同一磁盘的根目录,即服务器中的物理磁盘(因此没有 SAN 映射或任何会触发 CASPOL 命令的内容) 据我所知) 并保持其他一切相同,相同的用户,相同的配置等。, ,当我们尝试调用 .NET 窗口时,应用程序会悄然崩溃。它以消失的方式崩溃,这表明它可能类似于堆栈溢出。我们正在考虑向应用程序的某些部分添加日志记录,以便能够弄清楚发生了什么以及在哪里发生,但我也在这里发布了这个问题。

到目前为止,我们已经验证了 CASPOL 访问列表中没有任何异常,NGEN 缓存中没有任何异常(我在想,如果服务器所有者使用过它,可能之前的图像已损坏),并且 NGEN 缓存中没有任何异常。 GAC(我们不将 GAC 用于程序集)。

总结:

  • 如果程序从 U:\Documents and Settings\USERNAME\Desktop\directory 运行,则它可以工作
  • 如果从 U:\ 目录运行,则不会
  • 你:是服务器中的物理磁盘
  • NGEN 或 GAC 缓存中没有明显的异常情况
  • 正确的 .NET 运行时已安装,我们的应用程序的正确文件也已安装(如果从桌面位置运行,确实可以正常工作)

有人有什么可以帮忙的吗?

编辑: 问题 在这里再次询问 具有不同/其他信息,并“解决”。

有帮助吗?

解决方案

我的第一个尝试是从 MS-Sysinternals 运行进程监视器,并查看这两种情况下的调用/结果有何不同。也许这会给你一些提示(同一调用的不同结果,问题运行中的一些错误不是好的错误......)

您可以从 MS 下载进程监视器:http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx

其他提示

我前段时间也遇到过这样的问题。经过一番拉扯,我发现了问题。

使用 Process.Start() 或任何此类调用时要非常小心,因为根据您启动它的方式,它可以使用各种文件夹作为工作环境(当前路径、系统环境等)。

我的第一个想法是,您需要确保程序中没有定义相对/绝对路径来引用程序集、文件等。当您移动应用程序根目录时,这会引起麻烦。

是否有可能与用户权限有关?运行它从 LUA 探照灯 去检查。即使它不直接相关,该工具也可能会提供一些有用的提示。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top