Need command to restart Notepad ++
-
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++.exeIs there a simpler solution to restart Notepad ++ from the menu “Run”?
-
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 FunctionThis 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
/fswitch 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
/fswitch 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.exesincetaskkillis a console command, hencecmd.exeis started automatically. Or, to be exact,taskkillis 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 thestartcommand 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))
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