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.
    • andrecool-68A Offline
      andrecool-68
      last edited by

      In the file shortcuts.xml I wrote this code:

      		<Command name="Restart" Ctrl="no" Alt="no" Shift="no" Key="0">Restart.bat</Command>
      

      It runs the Restart.bat file with this code:

      taskkill /f /im notepad++.exe
      start notepad++.exe
      

      Is there a simpler solution to restart Notepad ++ from the menu “Run”?

      dinkumoilD 1 Reply Last reply Reply Quote 2
      • 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