2010-07-14 69 views
2

我有一個CustomInstaller類(System.Configuration.Install.Installer),基本上我在Install方法中打開一個對話框窗體。 我不知道是否有可能說這個窗體的'Parent'屬性是設置過程窗口?安裝項目CustomActions類中的窗口處理程序

我該怎麼做?

回答

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(); 
     } 
+0

它作爲MainWindowHandler返回零。我想知道爲什麼... – Agzam 2010-07-14 15:31:09

+0

我明白了......這是因爲Windows Installer在不同的進程啓動CustomActions,但在同一棵樹中... – Agzam 2010-07-14 15:36:27

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沒有竅門

相關問題