none
windows 登出仍可繼續執行(透過windows API) RRS feed

  • 問題

  • 各位大大您们好,我想請問一下,可以透過windows API寫讓自己程式登出,和關機的動作,那可以用同樣的方法寫當user登出時,程式仍然繼續執行嗎,是否有相關的資料可以參考,於由網路上都是利用c# 的windows service方式,所以想要請各位大大幫忙,謝謝
    2009年2月11日 上午 08:36

解答

  • C# 寫的 Windows Service 會受限於 .NET Framework 的執行環境,這也是為什麼用 C# 寫 Service 無法在使用者登出後繼續可用的根本因素,如果要寫跟隨系統生命週期的 Windows Service 的話,就一定要由原生環境來跑,也就是用 C++ 來寫,C++ 可以直接存取 Windows API。

    若沒學過,學一下吧,C++ 的應用會比 C# 更寬廣(驅動程式也可以用 C++ 寫)。
    MVP 2009 (ASP.NET), MCPD: ASP.NET Developer 3.5, MCPD: Windows Developer 3.5, MCITP: Database Developer 3.5, MCITP: Enterprise Administrator 不想被人認為是小白,就不要總是在做一堆會讓人認為是小白的事。
    • 已標示為解答 冰糖旋風 2009年2月13日 上午 09:13
    2009年2月12日 上午 01:48
    版主
  • 小朱 表示:

    C# 寫的 Windows Service 會受限於 .NET Framework 的執行環境,這也是為什麼用 C# 寫 Service 無法在使用者登出後繼續可用的根本因素,如果要寫跟隨系統生命週期的 Windows Service 的話,就一定要由原生環境來跑,也就是用 C++ 來寫,C++ 可以直接存取 Windows API。

    若沒學過,學一下吧,C++ 的應用會比 C# 更寬廣(驅動程式也可以用 C++ 寫)。


    MVP 2009 (ASP.NET), MCPD: ASP.NET Developer 3.5, MCPD: Windows Developer 3.5, MCITP: Database Developer 3.5, MCITP: Enterprise Administrator 不想被人認為是小白,就不要總是在做一堆會讓人認為是小白的事。





    这位大大   c#写的windows service完全可以在用户登出后继续执行。。。  并不是用户登出了  就卸载了 .net framework阿。。。
    系統生命週期问题  实现lifetimeservice的时候 返回null就可以了
    Guitar Hero IV -- Singing Rock & Roll.
    2009年2月13日 上午 07:14

所有回覆

  • 用 C++ 來寫 Windows Service 就行了。

    http://msdn.microsoft.com/en-us/library/ms685141(VS.85).aspx


    MVP 2009 (ASP.NET), MCPD: ASP.NET Developer 3.5, MCPD: Windows Developer 3.5, MCITP: Database Developer 3.5, MCITP: Enterprise Administrator 不想被人認為是小白,就不要總是在做一堆會讓人認為是小白的事。
    2009年2月11日 下午 02:00
    版主
  •   對不起喔,這位大大,可是我是用c#的耶,c++我沒學過,那還可以用wndows API寫嗎,謝謝
    2009年2月12日 上午 01:36
  • C# 寫的 Windows Service 會受限於 .NET Framework 的執行環境,這也是為什麼用 C# 寫 Service 無法在使用者登出後繼續可用的根本因素,如果要寫跟隨系統生命週期的 Windows Service 的話,就一定要由原生環境來跑,也就是用 C++ 來寫,C++ 可以直接存取 Windows API。

    若沒學過,學一下吧,C++ 的應用會比 C# 更寬廣(驅動程式也可以用 C++ 寫)。
    MVP 2009 (ASP.NET), MCPD: ASP.NET Developer 3.5, MCPD: Windows Developer 3.5, MCITP: Database Developer 3.5, MCITP: Enterprise Administrator 不想被人認為是小白,就不要總是在做一堆會讓人認為是小白的事。
    • 已標示為解答 冰糖旋風 2009年2月13日 上午 09:13
    2009年2月12日 上午 01:48
    版主
  • Window Service 跟一般的程式登出及程式執行有何不同?
    Window Service 關機後,程式會執行嗎?
    Window Service 登出後,程式會執行嗎?
    其實Window Service 登出後其實還是有系統內建User在執行.
    所以你也可以模擬它的作法,User登出後,背景仍有一個系統User去執行.
    2009年2月12日 上午 01:52
  • 小朱 表示:

    C# 寫的 Windows Service 會受限於 .NET Framework 的執行環境,這也是為什麼用 C# 寫 Service 無法在使用者登出後繼續可用的根本因素,如果要寫跟隨系統生命週期的 Windows Service 的話,就一定要由原生環境來跑,也就是用 C++ 來寫,C++ 可以直接存取 Windows API。

    若沒學過,學一下吧,C++ 的應用會比 C# 更寬廣(驅動程式也可以用 C++ 寫)。


    MVP 2009 (ASP.NET), MCPD: ASP.NET Developer 3.5, MCPD: Windows Developer 3.5, MCITP: Database Developer 3.5, MCITP: Enterprise Administrator 不想被人認為是小白,就不要總是在做一堆會讓人認為是小白的事。





    这位大大   c#写的windows service完全可以在用户登出后继续执行。。。  并不是用户登出了  就卸载了 .net framework阿。。。
    系統生命週期问题  实现lifetimeservice的时候 返回null就可以了
    Guitar Hero IV -- Singing Rock & Roll.
    2009年2月13日 上午 07:14
  • 謝謝各位大大的幫助
    2009年2月13日 上午 09:13
  • 本人最近正好也在寫windows service,使用 C# .NET Framework3.5。
    就算登出照樣有在執行呀。
    前面所提所提:登出就不能執行,有更明確的依據來源嗎?
    2009年4月13日 上午 01:56
  • 你去安裝Windows Service 時(不是自己的),在某個步驟,它會叫你是設執行的帳號(通常是系統帳號),這個執行帳號是電腦開機時會去做登入的動作.
    Windows Service 我比較沒在管,你可以問你們系統管理員比較清楚.
    而就我們程設師來說接觸IIS會比較多,裡面有用到ASPNET,NETWORK SERVICE.
    而SQL Server 會用到 SQLxxxxx.....等內建角色.
    所以你管理者帳號登出,在Server不關機狀態下 IIS跟Sql Server 還是可以繼續服務.

    2009年4月13日 上午 02:23
  • 你說的是Windows Service執行時的「登入身份」。 若是背景(Agent類的應用)服務的話,一般選用"本機系統帳戶"。在我的編碼經驗上就夠用了。 若要提供大量的服務功能,現在首選是WCF,再來是ASP.NET WebService,若都不能滿足才考慮Windows Service。 與桌用互動的選項還沒用過,必竟service是沒GUI的, 若是要與GUI互動,我是用自動啟動且畫面先不顯示 加上 taskbar上的小圖示配合使用。 現在我的C# Windows Service在沒登入的狀況下,還跑得好好的。 沒前面所題什麼.NET Framework 環境的問題。
    2009年4月13日 上午 10:50