【问题标题】:open file dialog not working from Installer class in c# application在 C# 应用程序中的安装程序类中打开文件对话框不起作用
【发布时间】:2013-06-18 11:45:59
【问题描述】:

我通过 Visual Studio 2010 安装和部署项目设计了我的项目 MSi 文件,我在其中添加了一个自定义操作。在自定义操作中,我正在打开 OpenFile 对话框。它在应用程序内部工作正常。但从安装程序它挂出。

public override void Install(IDictionary stateSaver)
        {
            base.Install(stateSaver);
             OpenFileDialog fdlg = new OpenFileDialog();
            fdlg.Title = " Dialog";
             ....
             ....
            if (fdlg.ShowDialog() == DialogResult.OK)
            {
                tempPath = fdlg.SafeFileName;
                mappingPath = fdlg.FileName;
            }
    }

【问题讨论】:

  • “闲逛”。这是否意味着您看到或没有看到屏幕上显示的对话框?
  • 应用程序没有响应..可以看到鼠标加载器正在加载...
  • 是的,如果我回忆起我使用 Installshield 的日子,当您使用 DLL 进行 CA 时,您不能做 GUI 的东西(至少不可靠)。对于所有此类 GUI 工作,我们总是设置返回标志并在 InstallScript 中做出反应。

标签: c# installation windows-installer


【解决方案1】:

来自Soumitra Mondal's WebLog

FileDialog.ShowDialog 需要 STA 线程,而 MSI 作为 MTA 线程 运行。为了实现这一点,您需要启动 STA 后台线程并从该线程调用对话框

你需要改变你的电话从

DialogResult ret = fdlg.ShowDialog();

DialogResult ret = STAShowDialog(fdlg);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    相关资源
    最近更新 更多