我有一個使用WiX編寫的MSI,它將調用第三方應用程序作爲安裝過程的一部分。我可以讓應用程序執行,但是它會在後臺打開,位於安裝程序後面。有什麼辦法讓應用程序出現在安裝程序前面?從MSI啓動的第三方應用程序顯示在後臺
有問題的應用程序需要提升權限,因此從「完成」對話框運行它不是一個選項。
我有一個使用WiX編寫的MSI,它將調用第三方應用程序作爲安裝過程的一部分。我可以讓應用程序執行,但是它會在後臺打開,位於安裝程序後面。有什麼辦法讓應用程序出現在安裝程序前面?從MSI啓動的第三方應用程序顯示在後臺
有問題的應用程序需要提升權限,因此從「完成」對話框運行它不是一個選項。
您是否在使用EXE命令?我相信這個自定義動作擴展在前面運行程序。如果沒有,你可以隨時寫自己的。
我剛剛想通做到這一點的最好辦法。我從多個來源拼湊在一起。這是C#自定義操作啓動一個EXE。您也可以通過Wix ExeCommand啓動該exe文件,並使用自定義操作在手動找到正確的進程後將其轉發。
[DllImport("user32.dll")]
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
[DllImport("user32.dll")]
static extern IntPtr GetTopWindow(IntPtr hWnd);
static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2);
const UInt32 SWP_NOSIZE = 0x0001;
const UInt32 SWP_NOMOVE = 0x0002;
const UInt32 SWP_SHOWWINDOW = 0x0040;
[CustomAction]
public static ActionResult BringExeForward(Session session)
{
ProcessStartInfo processInfo = new ProcessStartInfo("Application.exe");
Process bProcess = Process.Start(processInfo);
while (GetTopWindow((IntPtr)null) != bProcess.MainWindowHandle)
{
SetWindowPos(bProcess.MainWindowHandle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
}
SetWindowPos(bProcess.MainWindowHandle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
return ActionResult.Success;
}
您的建議讓我可以使用提升的特權從「完成」對話框運行應用程序,非常感謝。不幸的是,它並沒有解決我的問題:新的應用程序有時仍然在另一個窗口後面啓動。 – 2014-10-02 15:29:37
你可以修改你的應用程序在啓動時到達前臺嗎? – 2014-10-02 16:09:56
恐怕不是我的應用程序。我想我可以編寫自己的包裝來到前臺,然後啓動應用程序,但如果可能的話,我想避免那種雜技。 – 2014-10-02 17:31:31