Community

    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search

    Need command to restart Notepad ++

    Help wanted · · · – – – · · ·
    5
    19
    2835
    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-68
      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”?

      dinkumoil 1 Reply Last reply Reply Quote 2
      • dinkumoil
        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 Chuh 1 Reply Last reply Reply Quote 3
        • Meta Chuh
          Meta Chuh @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>
          
          dinkumoil andrecool-68 2 Replies Last reply Reply Quote 3
          • dinkumoil
            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-68
              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>
              
              dinkumoil 1 Reply Last reply Reply Quote 1
              • dinkumoil
                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-68 1 Reply Last reply Reply Quote 3
                • andrecool-68
                  andrecool-68 @dinkumoil last edited by

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

                  dinkumoil 1 Reply Last reply Reply Quote 1
                  • dinkumoil
                    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-68 1 Reply Last reply Reply Quote 2
                    • andrecool-68
                      andrecool-68 @dinkumoil last edited by

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

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

                        @andrecool-68

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

                        andrecool-68 1 Reply Last reply Reply Quote 3
                        • andrecool-68
                          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 singh
                            rinku singh last edited by

                            try

                            @echo off

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

                            cls

                            andrecool-68 1 Reply Last reply Reply Quote 0
                            • andrecool-68
                              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 Chuh 2 Replies Last reply Reply Quote 1
                              • Meta Chuh
                                Meta Chuh @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 Chuh
                                  Meta Chuh @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
                                  • Ekopalypse
                                    Ekopalypse last edited by

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

                                    andrecool-68 1 Reply Last reply Reply Quote 4
                                    • andrecool-68
                                      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.

                                      Ekopalypse 1 Reply Last reply Reply Quote 1
                                      • Ekopalypse
                                        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-68 1 Reply Last reply Reply Quote 2
                                        • andrecool-68
                                          andrecool-68 @Ekopalypse last edited by

                                          @Ekopalypse I understood))

                                          1 Reply Last reply Reply Quote 1
                                          • First post
                                            Last post
                                          Copyright © 2014 NodeBB Forums | Contributors