2010-09-16 108 views
4

我的安装程序需要打开文件浏览对话框。由于没有WIX提供的文件浏览对话框,我写了一个C#dll,其中包含一个方法来在自定义操作调用时调用标准OpenFileDialog。然而,虽然这在Win2003中可以正常工作,但自定义操作仅在Windows 7上运行时挂起。似乎只要ShowDialog()调用停止。作为一个测试,我已经写了一个单独的Windows窗体应用程序与一个单一的对话框和按钮来调用OpenFileDialog,并如预期的那样工作正常。我只是无法让我的msi中出现OpenFileDialog!Win7上的OpenFileDialog失败

我怀疑它可能是一个安全的事情,所以我运行从管理员打开的msiexec安装程序,但没有区别!

有没有人有任何想法如何解决这个问题?

很多谢谢。

回答

0

当我尝试这个时,我发现它弹出后面其他MSI窗口。直到我明白了这一点,它看起来就像一个挂起。

对于这个和其他一些原因,我最终编写了一个定制的安装机制,并开始MSI。最终用户和他们的系统更友好。

2
// create a new thread with appropriate apartment state to launch UI 
    OpenFileDialog fileBrowser = new OpenFileDialog(); 
    Thread worker = new Thread(fileBrowser.Show); 
    worker.SetApartmentState(ApartmentState.STA); // <-- here is the magic code 
    worker.Start(); 
    worker.Join();