2009-10-16 31 views
2

我有許多與我的IIS網絡服務器在同一臺機器上運行的實用程序。使用ASP.Net在特定桌面上的服務器上啓動應用程序

我想要做的是允許網頁實例化一個可執行文件。如果我使用Process.Start(),則該過程將啓動,但顯然與Web服務器的用戶相同,因此無法與桌面交互。對於99%的應用程序,這不是問題。但是,我希望能夠像一個特定的用戶(只有我)啓動它們一樣運行它們。

這是更多的嘗試,看看這是否可能比一個嚴重的開發項目,所以我更感興趣的方法比目標。理想情況下,如果我登錄到盒子(幾乎總是),那麼它應該就像我按照快捷方式運行一樣。如果沒有,啓動應用程序並在登錄時將它連接到我的桌面將是完美的。如果在用戶登錄之前不可能,我可以接受。

我知道安全方面的考慮,但我通過緩解他們:

  • 網站需要身份驗證+ SSL
  • 應用程序啓動中不能被遠程修改的文件配置(或在
  • 名單全部由網頁用戶 - 只讀)
  • 該盒子在DMZ
  • 最壞的情況下,該機器是相對不重要的,可以很容易地重新鏡像 。

我GOOGLE了,但,這似乎是一個相當不尋常的請求,所以沒有很多的,除了信息「不要以爲你能做到這一點」 - 所以我想我會問這裏的希望獲得a)一種方法來做到這一點,或b)爲什麼不能做到的正確解釋。

如果它使任何簡單,拋開網絡方面 - 如何在其他用戶的安全上下文中啓動一個進程,連接到他們的桌面(如果有)提前

感謝您的幫助和你可以提供的指針。

回答

1

這裏的環境是一個思想:

創建一個asp.net應用程序來更新一個表,該表包含有關需要運行的應用程序的信息。因此可以在不登錄服務器的情況下設置應用程序路徑和觸發器。

然後創建一個windows服務來觀察這個表並根據需要運行這些進程? 這樣你只需要在你需要的賬號下運行服務。

這將有點像調度器,除了調度將在數據庫表中?

也可以根據需要使用此應用程序啓動和停止服務。

顯然,asp.net應用程序將不需要安全。

+0

這是我已經考慮過的事情,但這意味着我有一個應用程序輪詢該表24x7 - 我傾向於傾向於事件驅動模型。我的下一個想法是讓第二個應用程序坐在系統托盤中,並在回送時打開TCP端口 - 這將完成相同的事件,但仍然是事件驅動的。它還可以讓前端實時報告成功/失敗。 – Basic 2009-10-19 21:14:55

+0

我認爲這是我必須去的方式。感謝你的幫助 – Basic 2009-10-21 12:57:25

-1

我以前用過類似的想法來管理我的web服務器上的運行服務。你需要做的是模擬用戶。看看我的博客,我發佈瞭如何爲服務做到這一點。它應該幾乎和你一樣。

http://dotnetchris.wordpress.com/2008/09/24/scheduled-task-status-start-stop-of-windows-service/

的機器需要允許完全信任的代碼運行,因爲它使用的extern電話,但我認爲這顯然不是一個問題,因爲它是你的機器。

+0

非常感謝,現在正在測試它... – Basic 2009-10-16 16:40:02

+0

你好,通過你的使用方法(代碼修改了一下),Windows.GetCurrent()Name返回: 前: \ ASPNET 在: \ 之後: \ ASPNET 對process.start()的調用發生在impersonate()調用之後。 不幸的是,該應用程序仍顯示爲由ASPNET在taskmanager中擁有。 我的鑰匙代碼現在看起來是這樣的: – Basic 2009-10-16 19:31:39

+0

公共共享功能的RunAs(BYVAL用戶名作爲字符串,BYVAL密碼作爲字符串,BYVAL StartInfo的作爲的ProcessStartInfo)作爲整數 \t昏暗impersonationContext作爲WindowsImpersonationContext =無 \t嘗試 \t \t IO.File .AppendAllText( 「C:\ S.txt」, 「前」。&WindowsIdentity.GetCurrent()名稱&Environment.NewLine) \t \t impersonationContext = AssumeIdentity(用戶名, 「SOWare」,密碼) \t \t IO.File .AppendAllText(「C:\ S.txt」,「During:」&WindowsIdentity.GetCurrent()。Name&Environment.NewLine) \t \t的Process.Start(StartInfo的) \t最後 \t \t StopImpersonating(impersonationContext) \t結束Try 端功能 – Basic 2009-10-16 19:32:22

-1

如果您不擔心這個安全問題,爲什麼不乾脆把

<identity impersonate="true" 
     userName="domain\user" 
     password="password" /> 

在web.config改變整個Web應用程序

+0

我給這個別的去了 - 我想我已經嘗試過了。 – Basic 2009-10-19 21:15:43

+0

要確認 - 事件thuogh GetIdentity()返回_my_域/用戶名,如果我只是做一個process.start(),過程將啓動爲「ASPNET」。如果我還在ProcessStartInfo中指定了憑據,我會得到一個異常(拒絕訪問) – Basic 2009-10-19 21:46:54

相關問題