我们的应用程序是混合的Win32非托管应用程序和.NET 2.0托管应用程序。 Win32部分是主要的可执行文件,它在某些时候加载和托管.NET 2.0运行时并加载一些托管模块以打开新的winforms窗口。
我们已经分享了CASPOL类型的问题,但今天我们有一个非常奇怪的问题,我希望有人可以给我一些指示或想法,或者基本上只是真的,这会引发一些事情的火花这将有助于我们解决这个问题。
在通过citrix访问的服务器上,如果应用程序文件位于当前登录用户(服务器/域管理员)桌面上的目录中,则程序运行正常。 .NET窗口按预期打开。
但是,如果我们将目录移动到同一磁盘的根目录,这是服务器中的物理磁盘(因此没有SAN映射或任何会触发CASPOL命令到我的知识) 并保持其他所有内容相同,相同的用户,相同的配置等,当我们尝试调用.NET窗口时,应用程序会静默崩溃。它只是消失而崩溃,这表明它可能就像堆栈溢出一样。我们正在考虑在应用程序的某些部分添加日志记录,以便能够弄清楚会发生什么,以及在哪里,但我也在这里发布这个问题。
到目前为止,我们已经确认CASPOL访问列表中没有奇怪的内容,NGEN缓存中没有任何奇怪的内容(我想也许以前有过损坏的图像,如果服务器所有者使用过它),并且没有GAC中的奇怪之处(我们不会将GAC用于程序集)。
总结:
任何有可能帮助的人?
编辑:问题re-asked here包含不同/其他信息,并且“已解决”。
答案 0 :(得分:2)
有一段时间我确实遇到过这样的问题。经过多次拔毛我发现了问题。
使用Process.Start()或任何此类调用时要非常小心,因为根据您的启动方式,它可以使用各种文件夹作为工作环境(当前路径,系统环境等等。) p>
答案 1 :(得分:1)
我的第一个尝试是从MS-Sysinternals运行进程监视器,看看这两种情况下的调用/结果是不同的。 也许这会给你一些提示(同一个调用的不同结果,问题运行中的一些错误不是好的...)
您可以从MS下载进程监视器: http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx
答案 2 :(得分:1)
我首先想到的是,您需要确保程序中没有定义相对/绝对路径,以便在移动应用程序根目录时导致组件,文件等引起麻烦。
答案 3 :(得分:1)
它可能与用户权限相关吗?从LUA Buglight运行以检查。即使它没有直接相关,该工具也可能有一些有用的提示。