Community
    • Login

    Need command to restart Notepad ++

    Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
    19 Posts 5 Posters 5.2k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • dinkumoilD
      dinkumoil @andrecool-68
      last edited by dinkumoil

      @andrecool-68

      IMHO your code is even too simple. The TASKKILL command doesn’t really kill a process, instead it sends a signal to a process requesting to terminate itself. This way an application can show a confirmation dialog when it has unsaved data/documents. Notepad++ behaves exactly like that. Thus the start notepad++ command may fail to start a new instance of Npp if it is set to single-instance-mode.

      That’s the code I use for the same purpose (VB Script). It expects as the first command line argument the path to the Npp directory.

      Option Explicit
      
      
      '-------------------------------------------------------------------------------
      'Variables declaration
      '-------------------------------------------------------------------------------
      Dim objFSO, objWshShell, objWMIService
      Dim colProcesses, objProcess, strInstanceQuery
      Dim colEvents, objEvent, strEventQuery, intInterval
      Dim strNppDirPath, strNppExeName, strNppExePath
      
      
      '-------------------------------------------------------------------------------
      'Variables initialization
      '-------------------------------------------------------------------------------
      Set objFSO        = CreateObject("Scripting.FileSystemObject")
      Set objWshShell   = CreateObject("WScript.Shell")
      Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2" )
      
      strNppExeName     = "notepad++.exe"
      intInterval       = 1
      
      
      '-------------------------------------------------------------------------------
      ' Request termination of running Npp, wait for its termination and restart it
      '-------------------------------------------------------------------------------
      If WScript.Arguments.Count > 0 Then
        strNppDirPath = WScript.Arguments(0)
        strNppExePath = objFSO.BuildPath(strNppDirPath, strNppExeName)
      
        If objFSO.FileExists(strNppExePath) Then
          strInstanceQuery = "SELECT * FROM Win32_Process" & _
                             " WHERE ExecutablePath = '" & EscapeForWMI(strNppExePath) & "'"
      
          strEventQuery    = "SELECT * FROM __InstanceOperationEvent" & _
                             " WITHIN " & intInterval & _
                             " WHERE TargetInstance ISA 'Win32_Process'" & _
                             " AND TargetInstance.ExecutablePath = '" & EscapeForWMI(strNppExePath) & "'"
      
          Set colProcesses = objWMIService.ExecQuery(strInstanceQuery)
      
          For Each objProcess In colProcesses
            objWshShell.Run "taskkill /im " & Quote(strNppExeName), 0, False
      
            Set colEvents = objWMIService.ExecNotificationQuery(strEventQuery)
      
            Do
              Set objEvent = colEvents.NextEvent()
      
              Select Case objEvent.Path_.Class
                Case "__InstanceDeletionEvent" Exit Do
              End Select
            Loop
      
            objWshShell.Run Quote(strNppExePath), 1, False
      
            Exit For
          Next
        End If
      End If
      
      
      
      
      '===============================================================================
      ' Surround a string with double quotes
      '===============================================================================
      
      Function Quote(ByRef strString)
        Quote = """" & strString & """"
      End Function
      
      
      '===============================================================================
      ' Escape special chars of string for using it with WMI
      '===============================================================================
      
      Function EscapeForWMI(ByRef strAString)
        EscapeForWMI = Replace(strAString, "\", "\\")
      End Function
      

      This is the required entry for shortcuts.xml:

      <Command name="Restart" Ctrl="no" Alt="no" Shift="no" Key="0">wscript.exe /nologo "<Path-To-Restart-Script>" "$(NPP_DIRECTORY)"</Command>
      
      Meta ChuhM 1 Reply Last reply Reply Quote 3
      • Meta ChuhM
        Meta Chuh moderator @dinkumoil
        last edited by

        @dinkumoil

        The TASKKILL command doesn’t really kill a process, instead it sends a signal to a process requesting to terminate itself.

        not quite. with the /f switch in taskkill /f /im notepad++.exe, the process will be terminated non graceful and immediately.
        but your script is cool.

        @andrecool-68

        you can put it directly into shortcut.xml, without an extra batch file:

        <Command name="Restart" Ctrl="no" Alt="no" Shift="no" Key="0">cmd /c taskkill /f /im notepad++.exe && "FULL_PATH_TO_YOUR\notepad++.exe"</Command>
        
        dinkumoilD andrecool-68A 2 Replies Last reply Reply Quote 3
        • dinkumoilD
          dinkumoil @Meta Chuh
          last edited by dinkumoil

          @Meta-Chuh said:

          with the /f switch in taskkill /f /im notepad++.exe, the process will be terminated non graceful and immediately.

          You are right. I assumed that nobody wants to loose his unsaved documents, but there may be cases.

          1 Reply Last reply Reply Quote 1
          • andrecool-68A
            andrecool-68 @Meta Chuh
            last edited by

            @Meta-Chuh
            And how is such a combination of two code variants … does it violate the laws of criminal law?

            <Command name="Restart" Ctrl="no" Alt="no" Shift="no" Key="0">cmd /c taskkill /f /im notepad++.exe && start notepad++.exe</Command>
            
            dinkumoilD 1 Reply Last reply Reply Quote 1
            • dinkumoilD
              dinkumoil @andrecool-68
              last edited by dinkumoil

              @andrecool-68

              You have to escape the & characters to be compliant with the XML syntax:

              <Command name="Restart" Ctrl="no" Alt="no" Shift="no" Key="0">cmd /c taskkill /f /im notepad++.exe &amp;&amp; start notepad++.exe</Command>
              

              But why do you want to do that? It is not necessary to explicitly launch cmd.exe since taskkill is a console command, hence cmd.exe is started automatically. Or, to be exact, taskkill is started and attached to a new console.

              EDIT: Forget what I wrote above, you want to start Npp after terminating the running instance, thus you need to call cmd.exe.

              andrecool-68A 1 Reply Last reply Reply Quote 3
              • andrecool-68A
                andrecool-68 @dinkumoil
                last edited by

                @dinkumoil I just want to get the most minimal code.

                dinkumoilD 1 Reply Last reply Reply Quote 1
                • dinkumoilD
                  dinkumoil @andrecool-68
                  last edited by dinkumoil

                  @andrecool-68

                  Ah, now I understand your point, you erased the FULL_PATH_TO_YOUR\ part of @Meta-Chuh 's code.

                  Well, I would say you are lucky that it works without the full path to Npp. I guess currently Npp sets its own path as the current path when it executes the command. But I would not rely on that, maybe this behaviour changes in the future.

                  Over the years I got used to ALWAYS use fully qualified and quoted paths. This makes your scripts error proof and thus your life much more easy.

                  andrecool-68A 1 Reply Last reply Reply Quote 2
                  • andrecool-68A
                    andrecool-68 @dinkumoil
                    last edited by

                    @dinkumoil I always use the portable version of Notepad ++, and try not to write full paths.

                    dinkumoilD 1 Reply Last reply Reply Quote 0
                    • dinkumoilD
                      dinkumoil @andrecool-68
                      last edited by

                      @andrecool-68

                      You can use the Npp environment variable $(NPP_DIRECTORY).

                      andrecool-68A 1 Reply Last reply Reply Quote 3
                      • andrecool-68A
                        andrecool-68 @dinkumoil
                        last edited by

                        @dinkumoil said:

                        @andrecool-68

                        You can use the Npp environment variable $(NPP_DIRECTORY).

                        This is the most suitable way.

                        1 Reply Last reply Reply Quote 1
                        • rinku singhR
                          rinku singh
                          last edited by

                          try

                          @echo off

                          taskkill /f /im notepad++.exe
                          “C:\Program Files\Notepad++\notepad++.exe”

                          cls

                          andrecool-68A 1 Reply Last reply Reply Quote 0
                          • andrecool-68A
                            andrecool-68 @rinku singh
                            last edited by

                            @gurikbal-singh said:

                            try

                            @echo off

                            taskkill /f /im notepad++.exe
                            “C:\Program Files\Notepad++\notepad++.exe”

                            cls

                            I tried to get rid of it … and you offer me to return to this?

                            Meta ChuhM 2 Replies Last reply Reply Quote 1
                            • Meta ChuhM
                              Meta Chuh moderator @andrecool-68
                              last edited by

                              @andrecool-68

                              I tried to get rid of it … and you offer me to return to this?

                              the translator of @gurikbal-singh is on holiday 😁

                              1 Reply Last reply Reply Quote 1
                              • Meta ChuhM
                                Meta Chuh moderator @andrecool-68
                                last edited by Meta Chuh

                                @andrecool-68

                                by the way:

                                And how is such a combination of two code variants … does it violate the laws of criminal law?
                                <Command name="Restart" Ctrl="no" Alt="no" Shift="no" Key="0">cmd /c taskkill /f /im notepad++.exe && start notepad++.exe</Command>

                                lol, no, everything is legal 😉

                                your version is correct, mine was wrong, as it keeps the cmd window open.
                                i just have forgotten the start command while typing, sorry 🙏

                                1 Reply Last reply Reply Quote 2
                                • EkopalypseE
                                  Ekopalypse
                                  last edited by

                                  Just for completeness, there is also the $(NPP_FULL_FILE_PATH) variable.

                                  andrecool-68A 1 Reply Last reply Reply Quote 4
                                  • andrecool-68A
                                    andrecool-68 @Ekopalypse
                                    last edited by

                                    @Ekopalypse said:

                                    Just for completeness, there is also the $(NPP_FULL_FILE_PATH) variable.

                                    Please show me an example of your solution code.

                                    EkopalypseE 1 Reply Last reply Reply Quote 1
                                    • EkopalypseE
                                      Ekopalypse @andrecool-68
                                      last edited by

                                      @andrecool-68

                                      I don’t have one, it was in response to your response about using $(NPP_DIRECTORY),
                                      which would mean you need to concatenate directory and executable wheres $(NPP_FULL_FILE_PATH) is already the complete path.
                                      Did I misunderstood something?

                                      andrecool-68A 1 Reply Last reply Reply Quote 2
                                      • andrecool-68A
                                        andrecool-68 @Ekopalypse
                                        last edited by

                                        @Ekopalypse I understood))

                                        1 Reply Last reply Reply Quote 1
                                        • First post
                                          Last post
                                        The Community of users of the Notepad++ text editor.
                                        Powered by NodeBB | Contributors