Настройка обработчика окна проекта в классе CustomActions - PullRequest
2 голосов
/ 14 июля 2010

У меня есть класс CustomInstaller (System.Configuration.Install.Installer), и в основном я открываю диалоговую форму в методе Install. Интересно, можно ли как-то сказать, что свойство 'Parent' этой формы будет окном процесса установки?

Как я могу это сделать?

Ответы [ 2 ]

2 голосов
/ 14 июля 2010

Вам необходимо получить дескриптор окна установщика.Не уверен, как его получить, но 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();
        }
0 голосов
/ 11 октября 2011

Как простое дополнение, поскольку я искал тот же ответ, чтобы не допустить, чтобы главное окно 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 добился цели

...