Установка «Опции выполнения файла изображения» всегда будет открывать именованный exe-файл по умолчанию - PullRequest
9 голосов
/ 06 июня 2010

Поскольку эта ссылка предлагает , я хочу заменить Notepad.exe на Notepad2.exe, используя функцию " Опции исполнения файла изображения ", запустив команду

reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" 
      /v "Debugger" /t REG_SZ /d "\"c:\windows\Notepad2.exe\" /z" /f

Но когда я запускаю notepad , он все равно открывает файл

C: \ Windows \ notepad.exe

в notepad2.exe как текстовый файл по умолчанию.

Есть ли способ избежать этого?

Я знаю, что с использованием этой технологии Notepad.exe будет первым параметром, переданным Notepad2.exe. но я не знаю, как этого избежать: (

Ответы [ 5 ]

15 голосов
/ 08 августа 2012

Назначение ключа «отладчик» - автоматический запуск отладчика и передача исходной командной строки нужному отладчику.Он также устанавливает флаг win32 для функции CreateProcess, который указывает, что это сеанс отладки.

Подразумевается, что отладчик затем вызовет CreateProcess после соответствующей модификации аргументов.

>notepad.exe "\document1.txt"

превращается в

>mydebugger.exe notepad.exe "\document1.txt"

mydebugger может затем вызвать что-то вроде этого:

BOOL res = CreateProcess( NULL, L"notepad.exe \"\\document1.txt\", NULL, NULL,
                          FALSE, cFlags, env, NULL, startupInfo, procInfo&);

Таким образом, решение проблемы злоупотребления этим разделом реестра состоит в том, чтобы сделать поддельный отладчик, который может манипулировать командной строкой так, как вы хотите. Это должно быть простопроцесс, который просто анализирует командную строку и заменяет notepad.exe на notepad2.exe.Тогда вам нужно указать реестр на этот .exe

4 голосов
/ 02 октября 2014

Для Notepad ++, чтобы обойти «notepad.exe», вводимый в качестве документа, создайте простой пакетный файл средства запуска (см. Ответ @ Ben для выяснения причины), а затем укажите на это отладчик изображения (ответ la @ fenster ).

nppLauncher.bat:

if exist "C:\Program Files\Notepad++\notepad++.exe" start "" "C:\Program Files\Notepad++\notepad++.exe" %2 %3 %4 %5 %6 %7 %8 %9
if exist "C:\Program Files (x86)\Notepad++\notepad++.exe" start "" "C:\Program Files (x86)\Notepad++\notepad++.exe" %2 %3 %4 %5 %6 %7 %8 %9

Добавить в реестр:

reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v "Debugger" /t REG_SZ /d "\"...\path\to\nppLauncher.bat"" /f
3 голосов
/ 25 апреля 2014

Notepad Replacer использует эту технику, но делает ее чрезвычайно простой в использовании и работает с редакторами, которые не поддерживают отладчик.

1 голос
/ 29 июня 2010

С Здесь Замена Windows Notepad на Notepad2 4.1.24 (или новее)

Начиная с версии 4.1.24, официальный выпуск Notepad2 поддерживает этот метод замены Windows Notepad, поэтому описанные выше действия будут работать нормально. Тем не менее, нет никакой поддержки для автоматической замены Блокнота, так как официальный выпуск Notepad2 не изменит системный реестр. По той же причине по умолчанию отсутствует поддержка доступа к последним файлам через списки переходов Windows 7 (для этого сначала требуется регистрация приложений в системном реестре).

Также следует помнить, что автоматическая замена блокнота может иметь нежелательные последствия, если Notepad2 использовался в качестве замены блокнота с портативного устройства, а исходное состояние не восстанавливалось при отключении устройства.

Пакетный скрипт, запускаемый из каталога Notepad2 и заменяющий Windows Notepad, может выглядеть следующим образом (требуются повышенные права):

reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v "Debugger" /t REG_SZ /d "\"%~dp0Notepad2.exe\" /z" /f

Блокнот Windows можно восстановить с помощью этой команды (требуются повышенные права):

reg delete "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /f

Чтобы проверить результат, откройте Regedit и посмотрите на [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe]. Ключ отладчика должен содержать полный путь к notepad2.exe и включать завершающий /z, например ::

c:\local\bin\Notepad2.exe /z
0 голосов
/ 25 января 2018

Я использую следующий командный файл для открытия emacs вместо блокнота.Я также включил параметр для его обхода, чтобы я мог использовать блокнот, когда захочу.например, редактирование файла hosts из командной строки с повышенными правами:

notepad --NOTEPAD C:\Windows\System32\drivers\etc\hosts

Поместите это где-нибудь в путь и отредактируйте последнюю строку, чтобы открыть текстовый редактор:

@echo off
setlocal enabledelayedexpansion

::Sometimes you really want to use notepad (e.g. edit hosts file from an elevated command prompt)
if "_%~2_" == "_--NOTEPAD_" (
  set "REALLY_NOTEPAD=TRUE"
)

:: For testing calling notepad again without removing debugger registry key
:: making sure there's not an infinite loop!
if "_%~2_" == "_STOPSTOPSTOP_" (
start "" echo FAILED TO START NOTEPAD 2
exit /b 1
)

set "NOTEPAD=%~1"
:: SHIFT command will not affect the value of %* which holds all the original arguments %1 %2 %3
:: So need to remove notepad from "%*" all params variable
:: Prepending --START-- in case %NOTEPAD% appears in params
:: Quotes as NOTEPAD will /sometimes/ be in them in all params
set "ALL=%*"
set "ALLPARAMS=--START--%*"
set "ALLPARAMS=!ALLPARAMS:--START--"%NOTEPAD%"=--START--!"
set "ALLPARAMS=!ALLPARAMS:--START--%NOTEPAD%=--START--!"
:: Also remove /multiple/ spaces between NOTEPAD and parameters
set "ALLPARAMS=!ALLPARAMS:--START-- =--START--!"
set "ALLPARAMS=!ALLPARAMS:--START-- =--START--!"
set "ALLPARAMS=!ALLPARAMS:--START-- =!"
:: Also remove --NOTEPAD if present
set "ALLPARAMS=!ALLPARAMS:--START----NOTEPAD=--START--!"
set "ALLPARAMS=!ALLPARAMS:--START-- =--START--!"
set "ALLPARAMS=!ALLPARAMS:--START-- =--START--!"
set "ALLPARAMS=!ALLPARAMS:--START-- =!"
:: and --START--, just in case
set "ALLPARAMS=!ALLPARAMS:--START--=!"
IF "_%ALLPARAMS%_" == "__" (
:: Open a scratch buffer in emacs if no params
  set "ALLPARAMS=**SCRATCH**"
)

:: Unicode support (I hope)
chcp 65001

::TEST not removing debugger registry key
::if "_%REALLY_NOTEPAD%_" == "_TRUE_" start "" notepad STOPSTOPSTOP && exit /b

if "_%REALLY_NOTEPAD%_" == "_TRUE_" (
  reg DELETE "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v "Debugger" /F
  start "" notepad !ALLPARAMS!
  reg ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v "Debugger" /t REG_SZ /d "%~0"
  exit /b 0
)

C:\path\to\emacs\bin\emacsclientw.exe -na C:\path\to\emacs\bin\runemacs.exe "!ALLPARAMS!"

установите его для замены блокнотаиспользуя эту команду:

 reg ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v "Debugger" /t REG_SZ /d "c:\path\to\wherever\you\savced\script-above.cmd"

или просто вызовите скрипт следующим образом:

SCRIPT JUNK --NOTEPAD

, который должен вызвать блокнот, но после этого заменить его на этот скрипт

...