2014-09-30 84 views
1

我有一個使用WiX編寫的MSI,它將調用第三方應用程序作爲安裝過程的一部分。我可以讓應用程序執行,但是它會在後臺打開,位於安裝程序後面。有什麼辦法讓應用程序出現在安裝程序前面?從MSI啓動的第三方應用程序顯示在後臺

有問題的應用程序需要提升權限,因此從「完成」對話框運行它不是一個選項。

回答

0

您是否在使用EXE命令?我相信這個自定義動作擴展在前面運行程序。如果沒有,你可以隨時寫自己的。

How To: Run the Installed Application After Setup

+0

您的建議讓我可以使用提升的特權從「完成」對話框運行應用程序,非常感謝。不幸的是,它並沒有解決我的問題:新的應用程序有時仍然在另一個窗口後面啓動。 – 2014-10-02 15:29:37

+0

你可以修改你的應用程序在啓動時到達前臺嗎? – 2014-10-02 16:09:56

+0

恐怕不是我的應用程序。我想我可以編寫自己的包裝來到前臺,然後啓動應用程序,但如果可能的話,我想避免那種雜技。 – 2014-10-02 17:31:31

0

我剛剛想通做到這一點的最好辦法。我從多個來源拼湊在一起。這是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; 

} 
相關問題