3

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

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

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

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

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

总结:

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

有任何可能有帮助的人吗?

编辑:问题在这里用不同/其他信息重新询问,并“解决”。

4

4 回答 4

2

前段时间我也遇到过这样的问题。拉了很多头发后,我发现了问题。

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

于 2008-09-24T11:29:40.940 回答
1

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

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

于 2008-09-24T09:42:42.773 回答
1

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

于 2008-09-24T09:49:41.603 回答
1

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

于 2008-09-24T10:02:44.787 回答