我有一個CustomInstaller類(System.Configuration.Install.Installer),基本上我在Install方法中打開一個對話框窗體。 我不知道是否有可能說這個窗體的'Parent'屬性是設置過程窗口?安裝項目CustomActions類中的窗口處理程序
我該怎麼做?
我有一個CustomInstaller類(System.Configuration.Install.Installer),基本上我在Install方法中打開一個對話框窗體。 我不知道是否有可能說這個窗體的'Parent'屬性是設置過程窗口?安裝項目CustomActions類中的窗口處理程序
我該怎麼做?
您需要獲取安裝程序窗口的句柄。不太確定如何得到它,但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();
}
至於因爲我找了同樣的答案,以防止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沒有竅門
它作爲MainWindowHandler返回零。我想知道爲什麼... – Agzam 2010-07-14 15:31:09
我明白了......這是因爲Windows Installer在不同的進程啓動CustomActions,但在同一棵樹中... – Agzam 2010-07-14 15:36:27