Community
    • Login

    Need command to restart Notepad ++

    Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
    19 Posts 5 Posters 7.0k Views 2 Watching
    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 Offline
      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 Offline
        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 Offline
          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 Offline
            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 Offline
              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 Offline
                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 Offline
                  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 Offline
                    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 Offline
                      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 Offline
                        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 Offline
                          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 Offline
                            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 Offline
                              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 Offline
                                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 Offline
                                  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 Offline
                                    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 Offline
                                      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 Offline
                                        andrecool-68 @Ekopalypse
                                        last edited by

                                        @Ekopalypse I understood))

                                        1 Reply Last reply Reply Quote 1

                                        Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                        Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                        With your input, this post could be even better 💗

                                        Register Login
                                        • First post
                                          Last post
                                        The Community of users of the Notepad++ text editor.
                                        Powered by NodeBB | Contributors