在CustomActions类中设置项目Window Handler

时间:2010-07-14 14:01:00

标签: c# windows-installer custom-action

我有一个CustomInstaller类(System.Configuration.Install.Installer),基本上我在Install方法中打开一个对话框。 我想知道是否可能以某种方式说该表单的“父”属性是设置过程窗口?

我该怎么做?

2 个答案:

答案 0 :(得分:2)

您需要获取安装程序窗口的句柄。不太确定如何获得它,但Process.GetCurrentProcess()。MainWindowHandle应该给你很好的赔率。然后创建一个NativeWindow来包装句柄,以便您可以将其用作所有者。像这样:

        IntPtr hdl = Process.GetCurrentProcess().MainWindowHandle;
        var window = new NativeWindow();
        window.AssignHandle(hdl);
        try {
            using (var dlg = new YourForm()) {
                var result = dlg.ShowDialog(window);
                //...
            }
        }
        finally {
            window.ReleaseHandle();
        }

答案 1 :(得分:0)

作为一个简单的补充,因为我寻找相同的答案,以防止MSI主窗口重叠我的弹出窗口:

var thatmsihandle = Process.GetCurrentProcess().Handle;

一个简单的包装器将是:

internal class WindowHandler
{
    internal NativeWindow MainWindow { get; private set;}

    internal WindowHandler()
    {
        MainWindow = new NativeWindow();
        MainWindow.AssignHandle(Process.GetCurrentProcess().Handle);
    }

    internal void Dispose()
    {
        MainWindow.ReleaseHandle();
    }
}

感谢指针,但仍然节省了很多时间!

编辑:事实上似乎没有成功,好老的FindWindowA做了这个伎俩