none
win 10/7 除了windows service之外﹐有沒有其它方式讓多個使用者登入程式只執行一次? RRS feed

  • 問題

  • 最近寫了一支程式要放在公司內部使用者電腦內啟動時執行﹐本來寫的很開心﹐但後來發現使用者的電腦可能會有原使用者未登出而登入另一人﹐這時使得程式重複執行﹐造成有些資源已被佔用例如port。

    目前查到資料 windows service 可以登入後自動啟動也可以使用者不登出下其它使用者登入都能使用﹐但程式改寫為windows service 會有其它的問題﹐因為我的程式還必須呼叫其它外部視窗程式﹐使用windows service 又會碰到 session 0 隔離的問題﹐想請教在windows 10 和 7 除了 windows service 之外有沒有辦法其它方式讓同一PC的使用者登入自動執行且在原使用者未登出時另外登入另一位使用者能正常使用該程式而不會重複啟動?

    2020年7月19日 上午 02:49

解答

  • 解決 session 0 isolation 可以試著用以下的方式 

    SessionZeroInteractor 


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 https://skilltree.my/

    2020年7月19日 上午 03:03
    版主
  • Bill大﹐就如同你所描述的﹐我寫的東西其實算是一個服務﹐當初剛知道需求時並不知道user會有A未登出而B登入的情況﹐所以一開始想直接以WinForm程式撰寫放在啟動中就好﹐winform要debug比較容易﹐要呼叫外部程序也方便。
    不過user的行為確實有些複雜﹐所以不知道除了改寫為 service 外﹐不知道是不是還有其它的辦法。

    你的描述有提到占用port,表示這應該是通訊的軟體。一般來說,我們會把 通訊的部分作成 service , 細節資料操作的部分作成其他形式 (web, Windows Forms, WPF, mobile App ..)。 就是分開兩種專案。


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 https://skilltree.my/

    2020年7月20日 上午 02:32
    版主
  • 有一种偷懒的改动较小的办法,就是原程序不大动,然后新增一个service,这个service就一个简单功能,利用named pipe广播。一个客户端登录,就通知service广播,其它客户端收到广播消息后立即释放port或直接退出。
    2020年7月20日 上午 04:35

所有回覆

  • 解決 session 0 isolation 可以試著用以下的方式 

    SessionZeroInteractor 


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 https://skilltree.my/

    2020年7月19日 上午 03:03
    版主
  • 感謝 Bill 提供解決 session 0 的資料﹐ 是不是只能用 windows service 沒辦法用其它辦法了?

    2020年7月19日 上午 03:52
  • 使用带“Global\”前缀的Mutex也不管用吗?
    2020年7月19日 上午 09:57
  • 使用带“Global\”前缀的Mutex也不管用吗?

    樓主這需求聽起來有點麻煩,我的感覺是比方這個 Windows 有設定兩個使用者 A 與 B (不同帳號)

    A 先登進去系統後執行了某個 Application ,但 A 在沒有結束該 Application 的狀況下就登出。

    此時B如果接著登入 Windows , 必須能夠操作該 Application 。

    這等於要讓那個 Application 在執行狀態可以在不同的 user session 出現,好像有點不太可能。

    不過,如果事情沒有我想的這麼複雜,那 Global Mutex 應該就是答案了。


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 https://skilltree.my/


    2020年7月19日 上午 11:02
    版主
  • 原来是这个意思啊,这种情况只能用service吧,想不出其它方法。
    2020年7月19日 下午 12:48
  • Bill大﹐就如同你所描述的﹐我寫的東西其實算是一個服務﹐當初剛知道需求時並不知道user會有A未登出而B登入的情況﹐所以一開始想直接以WinForm程式撰寫放在啟動中就好﹐winform要debug比較容易﹐要呼叫外部程序也方便。
    不過user的行為確實有些複雜﹐所以不知道除了改寫為 service 外﹐不知道是不是還有其它的辦法。

    2020年7月20日 上午 02:08
  • Bill大﹐就如同你所描述的﹐我寫的東西其實算是一個服務﹐當初剛知道需求時並不知道user會有A未登出而B登入的情況﹐所以一開始想直接以WinForm程式撰寫放在啟動中就好﹐winform要debug比較容易﹐要呼叫外部程序也方便。
    不過user的行為確實有些複雜﹐所以不知道除了改寫為 service 外﹐不知道是不是還有其它的辦法。

    你的描述有提到占用port,表示這應該是通訊的軟體。一般來說,我們會把 通訊的部分作成 service , 細節資料操作的部分作成其他形式 (web, Windows Forms, WPF, mobile App ..)。 就是分開兩種專案。


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 https://skilltree.my/

    2020年7月20日 上午 02:32
    版主
  • 有一种偷懒的改动较小的办法,就是原程序不大动,然后新增一个service,这个service就一个简单功能,利用named pipe广播。一个客户端登录,就通知service广播,其它客户端收到广播消息后立即释放port或直接退出。
    2020年7月20日 上午 04:35
  • Bill 大﹐你猜的沒錯﹐和通訊有些相關﹐資料實作部分已經是另外寫成其他UI﹐所以需要外部呼叫。

    - 大﹐我那個原程序就是service的工作....

    看來還是得要改寫為 service ﹐謝謝兩位的幫忙~~

    2020年7月20日 下午 02:44