none
请教为何没有彻底退出程序? RRS feed

  • 问题

  • 以下是在一个软件中我写的外接程序的简化版本,在这个软件中运行这个外接程序,外接程序首先用"user"用户登录此软件,然后做一些事情,最后退出外部程序但不退出软件本身。
    退出后发现"user"用户一直处于登录状态,除非退出这个软件,我查看任务管理器的进程中也并没有"user"用户及对应的映像名称,请教是哪里出了问题?要如何修改?
    此软件API并没有提供Logoff的方法,我想应该是外部程序的问题.

        Private Sub Login()
            AM = New ApplicationManager
    		Call AM.Login("user", "123")	
    		DoSomeThing
        End Sub
    	
    	Private Sub DoSomeThing()
    		'...
    	End Sub
    
        Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click
    		AM = Nothing
    		Application.Exit()
        End Sub



    • 已编辑 leon1526 2017年1月6日 3:48 增加描述
    2017年1月6日 3:34

答案

  • 请问这个user值的是Windows账户还是应用程序的账户? 如果是windows用户,我们可以通过调用WTSLogoffSession函数来登出此Windows用户。

    Hi LiWang,这是应用程序账户,非windows账户。
    我在网上找的资料说exit关闭的是当前进程的所有线程,不能关闭它创建的进程。新进程和本进程无任何关系。因此要在创建进程后加多一句:
    .IsBackground = True
    但是下面我这样写了问题依然存在
    Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     Dim t As New Thread(AddressOf Login)
     t.IsBackground = True
     t.Start()      
    End Sub

    • 已编辑 leon1526 2017年1月6日 8:30 描述
    • 已标记为答案 leon1526 2017年1月13日 12:40
    2017年1月6日 8:24

全部回复

  • 您好 leon1526,

    >>"退出后发现"user"用户一直处于登录状态"

    请问这个user值的是Windows账户还是应用程序的账户? 如果是windows用户,我们可以通过调用WTSLogoffSession函数来登出此Windows用户。

    Best Regards,
    Li Wang


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年1月6日 7:17
  • 请问这个user值的是Windows账户还是应用程序的账户? 如果是windows用户,我们可以通过调用WTSLogoffSession函数来登出此Windows用户。

    Hi LiWang,这是应用程序账户,非windows账户。
    我在网上找的资料说exit关闭的是当前进程的所有线程,不能关闭它创建的进程。新进程和本进程无任何关系。因此要在创建进程后加多一句:
    .IsBackground = True
    但是下面我这样写了问题依然存在
    Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     Dim t As New Thread(AddressOf Login)
     t.IsBackground = True
     t.Start()      
    End Sub

    • 已编辑 leon1526 2017年1月6日 8:30 描述
    • 已标记为答案 leon1526 2017年1月13日 12:40
    2017年1月6日 8:24