【问题标题】:C# WPF OpenFileDialog causing crash in XP, not in VistaC# WPF OpenFileDialog 在 XP 中导致崩溃,而不是在 Vista 中
【发布时间】:2011-04-02 18:39:21
【问题描述】:

我有一个 WPF 应用程序,可以在我的 Vista 开发机器上运行良好,但不能在生产 XP 机器上运行。唯一的问题是调用 OpenFileDialog.Show()。一旦我调用该方法,应用程序就会在 XP 框上终止。

该问题不会触发异常。 (我在 try-catch 块中包围了该块,但无济于事。)当我单击 File->Open 应用程序并在 XP 中退出时。有趣的是,我可以使用 File->Save 并使用 Save As 对话框将文件写入磁盘。我已经尝试将它构建到 .Net 3.0 和 3.5,但它没有任何区别。

我已经尝试过 Microsoft.Win32.OpenFileDialog 和 System.Windows.Forms.OpenFileDialog 并得到完全相同的症状。

Microsoft.Win32 变体的代码块:

尝试 { OpenFileDialog ofd = new OpenFileDialog(); if (ofd.ShowDialog().Value) { //做一点事 } } 捕捉(例外前) { MessageBox.Show(ex.ToString(), "错误!"); }

我唯一的线索是安全事件日志中的以下(部分)条目。

事件类型:失败审计 事件来源:安全 事件类别:对象访问 事件编号:560 描述: 对象打开: 对象服务器:安全 对象类型:键 对象名称:\REGISTRY\MACHINE\SOFTWARE\Microsoft\EnterpriseCertificates\Disallowed 访问:删除 READ_CONTROL WRITE_DAC WRITE_OWNER 查询键值 设置键值 创建子键 枚举子键 通知密钥更改 创建链接

有什么想法吗? (请!)

【问题讨论】:

  • System.Windows.Forms.OpenFileDialog 是 WinForms 之一,不应在 WPF 中使用。

标签: c# wpf openfiledialog


【解决方案1】:

感谢您的建议。我验证了注册表权限和完全信任问题。事实证明,虽然我专门将我的应用程序构建到 .Net 3.0(基于标准组织图像),但我仍然不完全理解对 .Net 3.5 SP1 的依赖。我的问题的解决方案是在所有受影响的计算机上安装 .Net 3.5 SP1。

我只是想关闭循环。再次感谢所有贡献想法的人。

【讨论】:

    【解决方案2】:

    注册表项似乎存在权限问题。我的第一个建议是检查该密钥的权限并验证 ACL 是否正确(最好将它们与应用正在运行的另一个 XP 框进行比较)。

    如果权限正常,那么您应该尝试重新安装 .NET(也许安装程序会重置注册表项上的一些必需权限)。

    如果一切都失败了,请在有问题的机器上重新安装 XP,除非有人有更好的主意。

    【讨论】:

      【解决方案3】:

      您的生产程序集似乎并未在完全信任的情况下运行。您是从网络共享运行的吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-05
        • 1970-01-01
        • 1970-01-01
        • 2010-09-25
        • 2011-11-07
        • 2016-12-09
        • 2016-04-11
        • 1970-01-01
        相关资源
        最近更新 更多