2009-11-13 63 views
2

如何從運行的.NET後臺進程在活動用戶會話中啓動程序。基本上我有一個.NET應用程序作爲服務運行,我希望該應用程序在特定事件發生時在用戶桌面上啓動特定的窗口應用程序。從服務中啓動活動用戶會話中的程序?

我該怎麼做?

這個問題是與此相關的一個:Start a program in active user session with PowerShell remoting

更新
使用Process.Start管它,因爲它啓動在當前的應用程序會話的應用程序將不會在這裏工作。它不會在特定用戶活動桌面會話中啓動應用程序。

+0

我不是100%肯定它會工作,幾乎沒有發佈答案。 – ChrisF

+0

克里斯,我很感激你的時間。 –

+0

1)如果有多人登錄到系統會發生什麼情況?這可能發生在終端服務或快速用戶切換。 2)您是否希望在用戶的安全上下文或服務的安全上下文中啓動窗口化的應用程序? – Ragesh

回答

0

CreateProcessWithLogonW函數將允許您傳遞希望應用程序運行的用戶的憑據。

此外,請注意,如果沿着這條路線走下去,您需要傳遞STARTUPINFO結構,以便它在右側桌面上啓動,而不是將其保留爲空。

+1

「運行方式」與我在此嘗試執行的操作不同。它僅使用特定的用戶憑證在當前會話中運行應用程序。 –

+0

對不起,我沒有先檢查你的相關問題。我相信通過使用WTSQueryUserToken可以在一臺機器上實現,以便在特定會話中啓動,但我沒有意識到涉及到遠程處理。 –

2

您可以構建用戶在後臺運行的某種輕量級偵聽器應用程序嗎?據推測,您的服務可以與偵聽器進行通信,並讓偵聽器在用戶上下文中運行後實例化窗口化應用。

+0

絕對是一種可能的方法。儘管對我來說不是很有趣。我只是在尋找一種快速的方法來使用Windows Remoting(.NET)跨多臺機器在自己的會話上回收應用程序。如果我無法輕鬆完成,最好的方法就是讓應用程序作爲服務運行,並且我可以重新啓動服務,而不用擔心它在特定的會話桌面上運行。 –

0

查看窗口服務的登錄上下文作爲shown here。這允許Windows服務與桌面會話進行交互。

+0

我相信這隻適用於/ CONSOLE會話,但不允許您定位特定的活動用戶會話。 –

+0

我相信你是不正確的,因爲我看到一個Windows服務之前與用戶的桌面交互。 – BlueSam

相關問題