问题:.NET代码从同一磁盘上的一个目录运行,但不从另一个目录运行
我们的应用程序是混合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:\目录运行,则不会
- U:是服务器中的物理磁盘
- NGEN或者GAC缓存中没有明显的异常
- 安装了正确的.NET运行时,已经安装了适用于我们应用程序的文件(如果从桌面位置运行,则确实可以正常工作)
任何有帮助的人吗?
编辑:问题在这里用其他/其他信息重新提出,并"解决"。
解决方案
我的第一个选项是从MS-Sysinternals运行进程监视器,并查看这两种情况的调用/结果有所不同。
也许这会给我们一些提示(同一呼叫的结果不同,问题运行中的一些错误不是很好的结果...)
我们可以从MS下载过程监视器:
http://technet.microsoft.com/zh-cn/sysinternals/bb896645.aspx
我首先想到的是,我们需要确保在程序中没有定义用于引用程序集,文件等的相对/绝对路径,这在移动应用程序根目录时会引起麻烦。
它可能与用户特权有关吗?从LUA Buglight运行它进行检查。即使它不直接相关,该工具也可能会提供一些有用的提示。
一段时间以前,我恰好遇到了这样的问题。经过多拉头发,我发现了问题。
使用Process.Start()或者任何此类调用时,请务必小心,因为根据启动方式的不同,它可以使用各种文件夹作为工作环境(当前路径,系统环境等)。