3

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

该问题不会触发异常。(我已经在 try-catch 块中包围了该块,但无济于事。)当我单击“文件”->“打开”应用程序并在 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
                        查询键值
                        设置键值
                        创建子键
                        枚举子键
                        通知密钥更改
                        创建链接

有任何想法吗?(请!)

4

3 回答 3

1

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

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

于 2010-09-02T07:22:50.657 回答
0

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

于 2010-08-23T19:02:23.583 回答
0

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

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

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

于 2010-08-23T18:34:10.317 回答