我遇到了与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)的问题,但它没有。
我做错了什么?
1条答案
按热度按时间yhxst69z1#
在
System.Configuration.Install.Installer
中显示一个窗口可能不是一个好主意,但是如果你仍然想尝试一下,那么在STA线程上创建一个Application
类。