2010-03-10 34 views
2

我們現在從客戶端開始一個新的自定義項目,其中一個要求是進程無法終止,除非系統正在關閉,重新啓動或註銷。不間斷的Windows進程

此應用程序監視USB接口。我們將使用WMI定期查詢設備。

客戶端希望在Windows XP操作系統上運行應用程序,而不喜歡安裝.NET。所以我們將Visual Basic 6作爲我們的語言。

我主要關心的是這個應用程序無法終止。我們的項目顧問談論了反病毒,是的,一些反病毒不能終止。我在想如何在Visual Basic 6中做同樣的事情。我知道項目中會涉及API,但我應該去哪裏?所以API可以和我在一起。

我看到一些文章,將EXE轉換爲一種服務,創建Windows服務在Visual Basic 6等

所以請..分享您的想法。

+0

您可能也有興趣在這個問題上如何寫一個VB6服務http://stackoverflow.com/questions/2091310/create-a-windows-service-in-vb6 – MarkJ 2010-03-10 09:14:23

回答

0
+0

謝謝。但是有一些關於NTvc.ocx的問題。 – jaysonragasa 2010-03-10 05:24:56

+0

,但只要Visual Basic 6安裝程序到達,就會嘗試它。現在,只是集體的想法。 – jaysonragasa 2010-03-10 05:26:31

+0

您可能也對這個問題感興趣,關於如何在VB6上編寫服務http://stackoverflow.com/questions/2091310/create-a-windows-service-in-vb6 – MarkJ 2010-03-10 09:15:24

2

如果你想成爲邪惡的,你可以調用(正式)無證RtlSetProcessIsCritical NTDLL功能。如果您的進程終止,這將立即導致機器死機。

+0

heheh。不,我不想那樣。這兩個客戶都不會那麼想 – jaysonragasa 2010-03-10 05:56:12

+0

+1。不是爲了正確的答案,而是爲了邪惡的惡魔。 – 2010-03-10 09:40:35

+0

表示同意。 ;)_spacer_ – jaysonragasa 2010-03-10 12:16:31

2

如果沒有某種類型的內核模式掛鉤(包括編寫驅動程序),則無法創建進程。您可能需要查看Rootkit:如果您對此感興趣,可以顛覆Windows內核。但是,即使使用內核模式掛接,仍有許多終止進程的方式。另一種方法是使用用戶模式鉤子,很容易繞過,但對於非常簡單的項目就足夠了。

您要使用的解決方案取決於您想要使用終止保護多遠。即使您在阻止進程終止方面取得成功,也可能會阻止您的應用程序正常工作 - 例如,殺死WMI服務。

+0

「你不能創建一個沒有某種內核模式鉤子就無法終止的進程」是的,我從一開始就知道這一點。我想創建第二個應用程序來監視主應用程序,或者只是創建一個系統時間表來定期檢查主應用程序。 – jaysonragasa 2010-03-10 22:47:28

+0

這仍然不工作,因爲有人可以禁用您的計劃任務... – wj32 2010-03-12 11:24:47

+0

@ wj32:嗨...很好的答案..我知道關於鉤(TSR)...我發佈了類似的問題在喜歡:http:/ /stackoverflow.com/questions/12437648/uninterruptable-program-on-window-linux ...我請求你也請回答我的問題......謝謝。 – 2012-10-12 05:03:14

0

這是一個在VB6真的令人沮喪的編碼,現在特地我甩了我的頭在C#2年,雖然我在VB6編碼爲5年..

搬回是一種痛苦,好像我開始一個新的編程語言。

0

說實話,你正試圖在VB6中做一些它並不那麼偉大的事情。 當你說'不能終止' - 你是什麼意思?有幾個級別: a)應用程序顯示一個窗口,但用戶無法用X按鈕關閉它,或者它不顯示一個 b)應用程序顯示沒有窗口或可能位於任務欄 c)應用程序不顯示窗口並且無法從任務管理器的應用程序選項卡中關閉d)應用程序無法從任務管理器的進程列表中關閉應用程序(a)和(b)可能最容易在直接VB中執行。

(三)仍然可能,但越來越醜。 (d)讓你進入黑客領域,如果你確實管理它,幾乎肯定會受到折磨。

如果你真的需要阻止用戶關閉,那麼你可能會或多或少的破解它,但真正的答案是正如其他人所說 - 系統服務(這正是他們的目標對於)。然而,這是VB6不擅長的一件事,所以最好的解決方案是c#。