从安装程序类显示WPF窗口

ppcbkaq5  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(152)

我遇到了与issue类似的问题。我试图从System.Configuration.Install的安装程序类显示WPF窗口。我的窗口,对应于我的软件许可证管理器窗口,理想情况下应该在安装过程中或安装后弹出,以安装许可证。但是,安装完成时没有显示窗口,我不知道为什么。
下面是我的代码:

[RunInstaller(true)]
public partial class Installer1 : System.Configuration.Install.Installer
{
     public Installer1()
     {
         InitializeComponent();
     }

     // INSTALL EVENT //////////
     public override void Install(System.Collections.IDictionary stateSaver)
     {
         StaThreadWrapper(() =>
         {
             LicenseActivationWindow activationWindow = new LicenseActivationWindow();
             activationWindow.ShowDialog();
         });
     }

     // Method to call the xaml in a thread safe way
     private static void StaThreadWrapper(Action action)
     {
         var t = new Thread(o =>
         {
              action();
              System.Windows.Threading.Dispatcher.Run();
         });
         t.SetApartmentState(ApartmentState.STA);
         t.Start();
     }

     // UNINSTALL EVENT //////////
     public override void Uninstall(System.Collections.IDictionary stateSaver)
     {
     }
}

我不得不添加StathreadWrapper方法来修复直接从安装程序线程调用wpf窗口时出现的“The calling thread must be STA,because many UI components required this.”错误,我不再收到错误消息,但也无法显示窗口。我以为这会解决类似1(https://stackoverflow.com/questions/2853676/displaying-a-wpf-window-from-a-system-configuration-install-installer-class)的问题,但它没有。
我做错了什么?

yhxst69z

yhxst69z1#

System.Configuration.Install.Installer中显示一个窗口可能不是一个好主意,但是如果你仍然想尝试一下,那么在STA线程上创建一个Application类。

var t = new Thread(o =>
{
    var app = new System.Windows.Application();
    app.Run(new LicenseActivationWindow());
});
t.SetApartmentState(ApartmentState.STA);
t.Start();

相关问题