Jump to content

Kill process of current user only


Recommended Posts

Hi, I am trying to kill a process for the current logged user only. However I noticed that the ProcessClose command is trying to shut down all instances. I have tried the ProcessClose command with the exe name and the PID number and I get the same results. Here is my code so far. Thank you for your help.

Dim $PID1, $PID2

; Hide AutoIt tray icon
AutoItSetOption("TrayIconHide", 1)

; Launch Act along with Outlook Service
ShellExecute("D:\Program Files\ACT\Act for Windows\ActSage.exe", "-nosplash")
ShellExecute("D:\Program Files\ACT\Act for Windows\Act.Outlook.Service.exe", @SW_HIDE)

; Kill Act.Outlook.Service.exe when ActSage.exe is closed
$PID1 = ProcessExists("ActSage.exe") ; Will return the PID or 0 if the process isn't found.
$PID2 = ProcessExists("Act.Outlook.Service.exe") ; Will return the PID or 0 if the process isn't found.

If $PID2  Then ProcessWaitClose($PID1)
    ProcessClose($PID2)

Exit

Regards,

Jonathan

Link to comment
Share on other sites

Hi,

"current logged user" implies that there are more users logged on the same computer.

depending on how the process interacts between users (ie: multiple instances of the same exe)

If you kill the process - you kill it for all users.

Edit:

I suppose there's a way around it - i'm not sure how though.

My guess - get the User ID and then kill the process under it.

Edited by ripdad

"The mediocre teacher tells. The Good teacher explains. The superior teacher demonstrates. The great teacher inspires." -William Arthur Ward

Link to comment
Share on other sites

Hi,

"current logged user" implies that there are more users logged on the same computer.

depending on how the process interact between users (ie: multiple instances of the same exe)

If you kill the process - you kill it for all users.

A process is started by a user or the system. If a the same process is running for two users then really there will be 2 process running, 2 instances of the same program. If you kill one it will not effect the other.

I'm not sure how to do it in AutoIt but I know the with cmd tool taskkill you can specify the user name and PID. You will have to get the current logged in user, this may be the session, tasklist /v may give you this. You have to do some reading up on this.

You can use taskill with the Run() function. Do a tasklist first to see what is running.

Post your code because code says more then your words can. SciTe Debug mode - it's magic: #AutoIt3Wrapper_run_debug_mode=Y. Use Opt("MustDeclareVars", 1)[topic="84960"]Brett F's Learning To Script with AutoIt V3[/topic][topic="21048"]Valuater's AutoIt 1-2-3, Class... is now in Session[/topic]Contribution: [topic="87994"]Get SVN Rev Number[/topic], [topic="93527"]Control Handle under mouse[/topic], [topic="91966"]A Presentation using AutoIt[/topic], [topic="112756"]Log ConsoleWrite output in Scite[/topic]

Link to comment
Share on other sites

  • 5 years later...

Something like this should work

 

local $strComputer = @ComputerName
; What process to kill
local $strProcessName = "notepad.exe"
local $objWMI = ObjGet("winmgmts:\\" & $strComputer & "\root\cimv2")
local $colProcesses = $objWMI.ExecQuery("Select * from Win32_Process Where Name = '"& $strProcessName & "'")
local $intCount = $colResults.Count


for $objProcess in $colProcesses
    if $objProcess.GetOwner(@UserName, @LogonDomain) = 0 then
        $objProcess.Terminate()
    endif
next
; Exit script
exit

 

Link to comment
Share on other sites

While 1
If Not ProcessExists("ActSage.exe") Then 
run('cmd /c taskkill /F /FI "USERNAME eq ' & @USERNAME & '"' & ' /IM "Act.Outlook.Service.exe"')
exitloop
EndIf
sleep (50)
Wend

 

Edited by boththose
figured the loop should end

,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-.
|(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/
(_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_)
| | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) (
| | | | |)| | \ / | | | | | |)| | `--. | |) \ | |
`-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_|
'-' '-' (__) (__) (_) (__)

Link to comment
Share on other sites

ohh they got me again.  Fool me once shame on you, fool me for like the 8th time thats definitely me.

,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-.
|(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/
(_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_)
| | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) (
| | | | |)| | \ / | | | | | |)| | `--. | |) \ | |
`-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_|
'-' '-' (__) (__) (_) (__)

Link to comment
Share on other sites

  • 4 years later...

Hm, right, old topic 🙃

 

Anyway:

Dim $PID1, $PID2

; Hide AutoIt tray icon
AutoItSetOption("TrayIconHide", 1)

; Launch Act along with Outlook Service
$PID1 = ShellExecute("D:\Program Files\ACT\Act for Windows\ActSage.exe", "-nosplash")
$PID2 = ShellExecute("D:\Program Files\ACT\Act for Windows\Act.Outlook.Service.exe", @SW_HIDE)

While ProcessExists($PID1)
    Sleep(1000)
WEnd

ProcessClose($PID2)

 

Earth is flat, pigs can fly, and Nuclear Power is SAFE!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...