Need command to restart Notepad ++
-
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>
-
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 intaskkill /f /im notepad++.exe
, the process will be terminated non graceful and immediately.
but your script is cool.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>
-
@Meta-Chuh said:
with the
/f
switch intaskkill /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.
-
@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>
-
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 && start notepad++.exe</Command>
But why do you want to do that? It is not necessary to explicitly launch
cmd.exe
sincetaskkill
is a console command, hencecmd.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
. -
@dinkumoil I just want to get the most minimal code.
-
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.
-
@dinkumoil I always use the portable version of Notepad ++, and try not to write full paths.
-
You can use the Npp environment variable
$(NPP_DIRECTORY)
. -
@dinkumoil said:
You can use the Npp environment variable
$(NPP_DIRECTORY)
.This is the most suitable way.
-
try
@echo off
taskkill /f /im notepad++.exe
“C:\Program Files\Notepad++\notepad++.exe”cls
-
@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?
-
I tried to get rid of it … and you offer me to return to this?
the translator of @gurikbal-singh is on holiday 😁
-
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 thestart
command while typing, sorry 🙏 -
Just for completeness, there is also the
$(NPP_FULL_FILE_PATH)
variable. -
@Ekopalypse said:
Just for completeness, there is also the
$(NPP_FULL_FILE_PATH)
variable.Please show me an example of your solution code.
-
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? -
@Ekopalypse I understood))