背景
我们从本地映射到用户的W盘的Windows共享(UNC)运行所有Windows窗体应用程序。我们在过去几天遇到了连接问题,并且在从几分钟到几个小时运行后,我们的程序中的某些随机位置接收到System.Runtime.InteropServices.SEHException。
即使重新建立连接,也会抛出这些异常。它们似乎在显示对话框或其他形式时出现。没有任何程序在用户代码中执行任何磁盘/网络i / o。
问题
Windows窗体应用程序的延迟是否从exe文件中加载资源?
如果是这样的话,还是要强制这些加载更早?或者在失败后重新加载它们?
有关运行Windows的任何见解或建议都会从网络共享中形成应用程序?除了老板明显的“复制文件到本地机器”之外,不喜欢这个想法。
答案 0 :(得分:2)
我没有令人信服的证据,但使用内存映射文件是标准的MSFT实践。 Rotor中有很多CreateFileMapping()调用。对于像程序集这样的只读文件非常有效,内存页面不必由页面文件支持。
但是,当Windows内存管理器需要重新插入页面并且文件无法访问时,它会击中风扇。它很适合你的观察。除了你的老板承诺他的偏好和购买更可靠的网络硬件之外,没有解决方法。小时的MTBF非常差。
答案 1 :(得分:0)
如果您有权访问客户端计算机,则可以打开“管理工具”并转到“Microsoft .NET Framework配置”以定义应用程序的自定义权限集。有关更多信息,请参阅ID Automation的this article。
理论上,如果需要,您应该可以使用组策略或类似方法在整个网络中推送此更改,但我自己没有尝试过。
另一个选项是在Internet Explorer中打开安全区域设置,并将共享的文件://路径添加到本地Intranet区域,以便它具有更高的权限,例如:add file:// servername / sharename到本地Intranet区域。