选择路径对话框,软件卡主闪退

老江湖 0 信誉分
2026-08-03T05:57:22.4166667+00:00
        public void Test1()
        {
            try
            {
                FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
                folderBrowserDialog.Description = "请选择一个路径来保存下载";
                if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
                {
                    MessageBox.Show("选择目录:" + folderBrowserDialog.SelectedPath);
                }
                folderBrowserDialog.Dispose();
                folderBrowserDialog = null;
            }
            catch (Exception ex)
            {

            }
        }


        using Microsoft.WindowsAPICodePack.Dialogs;
        public void Test2()
        {
            try
            {
                using (var dialog = new CommonOpenFileDialog())
                {
                    dialog.IsFolderPicker = true; // 设为文件夹选择模式
                    dialog.Title = "请选择一个路径来保存下载";

                    // 如果不设初始目录,可以省略这行
                    // dialog.InitialDirectory = "C:\\Users";

                    if (dialog.ShowDialog() == CommonFileDialogResult.Ok)
                    {
                        MessageBox.Show("选择目录:" + dialog.FileName);
                    }
                }
            }
            catch (Exception ex)
            {
                // 记录或提示错误,不建议空处理
                MessageBox.Show("打开文件夹选择框时出错:" + ex.Message);
            }
        }

经过测试得出结论,用户电脑自动更新后,大部分都是触发上方事件弹出对话框后,卡主然后闪退软件。
希望得到解决方案。
开发人员技术 | C#
开发人员技术 | C#

一种面向对象的类型安全的编程语言,它起源于 C 语言系列,包括对面向组件的编程的支持。

0 个注释 无注释

2 个答案

排序依据: 非常有帮助
  1. Jay Pham (WICLOUD CORPORATION) 4,270 信誉分 Microsoft 外部员工 审查方
    2026-08-03T07:35:33.0466667+00:00

    您好 @老江湖 ,

    感谢您提供代码和测试结果。

    FolderBrowserDialogCommonOpenFileDialog 都依赖 Windows Shell。打开这些对话框时,系统可能会把杀毒软件、网盘同步工具或压缩软件等第三方 Shell 扩展加载到应用程序进程中。由于问题是在 Windows 自动更新后出现的,因此可能是某个 Shell 扩展与新版本不兼容,但目前还需要更多信息才能确认根本原因。

    请先进行以下检查:

    1. 在受影响的电脑上打开 事件查看器 → Windows 日志 → 应用程序
    2. 找到应用程序闪退时产生的 Application Error(事件 ID 1000)
    3. 请提供其中的 错误模块名称(Faulting module name)、Windows 版本(运行 winver)以及最近安装的 KB 更新。
    4. 可以使用 ShellExView 暂时禁用所有非 Microsoft 的 Shell 扩展,重新启动 Windows 资源管理器后再次测试。如果问题消失,请逐组启用扩展,以确认是哪一个扩展导致了崩溃。

    代码方面也建议:

    • 确保 ShowDialog()STA UI 线程中调用。
    • 调用时传入父窗口,例如 ShowDialog(this)
    • 不要使用空的 catch 块,建议记录完整异常和调用堆栈。

    如果这是本机 Shell 组件或第三方扩展导致的崩溃,.NET 的 try/catch 可能无法捕获。作为临时解决方案,可以在独立的辅助进程中打开文件夹选择对话框,避免对话框崩溃时同时关闭主程序。

    请先提供事件 ID 1000 中的“错误模块名称”,以便进一步定位问题。

    谢谢.

    此答案是否有帮助?

    1 个人认为此答案很有帮助。

  2. 已删除

    由于违反了我们的《行为准则》,此答案已被删除。 在采取措施之前,已通过自动检测手动报告或识别该答案。 有关详细信息,请参阅我们的行为准则


    已关闭批注。 了解详细信息

你的答案

提问者可以将答案标记为“已接受”,审查方可以将答案标记为“已推荐”,这有助于用户了解答案是否解决了提问者的问题。