在 Windows 7 中替换 notepad.exe

在 Windows 7 中替换 notepad.exe

好的,我真的真的想要用 Editpad 替换 Windows 7 中默认的 notepad.exe(是的,我想替换实际的可执行文件,不,我不想使用 Notepad2 之类的东西,所以请不要建议这样做)。我使用了以下批处理脚本,它以前对我有用:

@echo off
TITLE EditPad Install Script for Complete Windows Vista and 7 Notepad Replacement
echo.
echo EditPad Install Script for Complete Windows Vista and 7 Notepad Replacement
echo Version 2.0
echo.
echo Confirm to apply? (Press Ctrl-C and answer Y to terminate)
pause
echo.
echo.

if exist %SystemRoot%\notepad.original.exe goto exist_editpad_already
if exist %SystemRoot%\System32\notepad.original.exe goto exist_editpad_already
takeown /f %SystemRoot%\notepad.exe
takeown /f %SystemRoot%\System32\notepad.exe
icacls %SystemRoot%\notepad.exe /grant "%USERNAME%":f
icacls %SystemRoot%\System32\notepad.exe /grant "%USERNAME%":f
IF EXIST %SystemRoot%\SysWOW64 (bcdedit.exe -set loadoptions "DDISABLE_INTEGRITY_CHECKS")
copy %SystemRoot%\notepad.exe %SystemRoot%\notepad.original.exe
copy %SystemRoot%\System32\notepad.exe %SystemRoot%\System32\notepad.original.exe
echo.
echo Original notepad.exe has been renamed to "notepad.original.exe" in its original folder.
echo.
echo Overwriting %SystemRoot%\notepad.exe with "%~dp0\EditPad.exe"
copy "%~dp0\EditPad.exe" %SystemRoot%\notepad.exe /y
echo Overwriting %SystemRoot%\System32\notepad.exe with "%~dp0\EditPad.exe"
copy "%~dp0\EditPad.exe" %SystemRoot%\System32\notepad.exe /y
echo.
echo EditPad installation is completed.
echo If no error occurred, EditPad will now replace all Notepad functions.
echo.
pause
goto eof

:exist_editpad_already
echo.
echo INSTALLED EditPad ALREADY! (notepad.original.exe exists in windows or windows system32)
echo.
pause
goto eof

:eof

该脚本确实用 Editpad 可执行文件替换了 notepad.exe,但现在如果我尝试打开一个文本文件,我会收到错误“您的 NOTEPAD.EXE 副本似乎已损坏。请尝试从原始安装包重新安装它。”

我使用的是 Windows 7 64 位。我该怎么做才能强制 Windows 允许我使用 Editpad 作为 notepad.exe,而不会出现这个愚蠢的错误消息?

更新:
我想我还有一些信息可能会有所帮助。问题似乎出在我运行 editpad.exe 上根本在 system32 目录中。如果我用其他各种 exe 文件替换system32\notepad.exe它们,它们可以正常运行,但当我尝试editpad.exe在该目录中运行时,Windows 7 会弹出一个对话框:“无法验证发布者。您确定要运行此软件吗?”如果我单击“运行”,我会收到“文件已损坏”错误 - 但仅当我在 system32 目录中运行它时才会出现这种情况。我需要找到一种方法让这个 exe 在 system32 目录中运行。

答案1

我的想法是创建一个支持应用程序,该应用程序可以搭载图像文件执行注册表项来正确运行 EditPad。

笔记:你必须恢复你的原来的首先打开 Windows 记事本,要么通过弹出的错误消息,要么通过撤消所做的更改。否则,无论您尝试什么,Windows 可能会继续用错误消息骚扰您。

提示: 记事本替代品Dracs 建议的操作与下面类似自动地。请先尝试一下,除非您有理由避免这样做,例如应用程序正在闭源。此时,您可以使用以下方法:

  1. 使用以下代码创建一个批处理文件。该批处理文件可以命名为替换器例如,它可以放在任何地方,例如 EditPad 的安装文件夹。(我假设 EditPad 安装在给定的路径中。如果不是,请更改它。)

    SET NotepadTempVar=%*
    IF DEFINED NotepadTempVar SET NotepadTempVar=%NotepadTempVar:"C:\Windows\System32\notepad.exe"=%
    IF DEFINED NotepadTempVar SET NotepadTempVar=%NotepadTempVar:"C:\Windows\notepad.exe"=%
    IF DEFINED NotepadTempVar (
        FOR /F "tokens=*" %%A IN ("%NotepadTempVar%") DO SET NotepadTempVar=%%A
    )
    IF DEFINED NotepadTempVar (
        START "" "C:\Program Files\EditPad\EditPad.exe" "%NotepadTempVar%"
    ) ELSE (
        START "" "C:\Program Files\EditPad\EditPad.exe"
    )
    
    • 警告!START 命令后必须有一个空字符串"",否则系统可能会陷入无限循环,不断创建新的命令提示符视窗。
    • 您可能需要验证原来的记事本的第二行和第三行反映了您的系统。我发现 32 位和 64 位 Windows 中的路径相同。路径是不区分大小写但要小心保留其周围的引号。
    • 在 64 位 Windows 上,您可能需要添加此额外的第二行和第三行之间的线:

      IF DEFINED NotepadTempVar SET NotepadTempVar=%NotepadTempVar:"C:\Windows\SysWOW64\notepad.exe"=%
      


  2. (选修的)使用批处理到 Exe 转换器将批处理文件编译为可执行程序。选择“不可见应用程序”选项。

    • 如果你不想使用批处理到 Exe 转换器,您可以使用其他解决方案,或者您可以使用批处理文件本身来执行以下步骤,而不是使用编译后的EXE文件。但是,如果您使用批处理文件本身,您将在 EditPad 打开之前看到命令窗口瞬间闪烁。

  3. 打开注册表编辑器通过打开“开始”菜单并搜索regedit(或使用运行命令来运行regedit)。

  4. 导航HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options

  5. notepad.exe如果其中不存在名为的项(左窗格中的文件夹)Image File Execution Options,请单击编辑 > 新建 > 键并输入notepad.exe新键的名称。如果该键已存在,则只需导航到该键即可。

  6. 如果右侧的键Debugger中不存在名为 (类型 REG_SZ) 的条目,请单击notepad.exe编辑 > 新建 > 字符串值并输入Debugger新条目的名称。

  7. 双击命名的条目Debugger并输入生成的 EXE 文件的完整限定位置和名称批处理到 Exe 转换器 或者如果您没有使用编译器,则批处理文件。将位置括在引号中。

    • 例如,假设您已将批处理文件存储在 EditPad 的程序文件夹中,则 Debugger 条目的值可能是"C:\Program Files\EditPad\Replacer.bat" 或者 "C:\Program Files\EditPad\Replacer.exe" 其中 Replacer.bat 是批处理文件,Replacer.exe 是在步骤 2 中获得的编译后的 EXE 文件(如果有)

  8. 通过以下方式测试设置:

    • 从“开始”菜单打开 Windows 记事本。应该会打开 EditPad。
    • 双击文本文件或任何与 Windows 记事本关联的文件。
    • 测试其他您知道应该正常打开 Windows 记事本的方法。它们很可能会打开 EditPad。

如果出现任何问题,则可能是您在第 1 步中创建的批处理文件中的路径不正确。如果您正确执行了其他步骤,则其他所有步骤都应该没有问题。只需验证并更正批处理文件中的路径(并根据需要重新编译 EXE)。

答案2

使用图像文件执行选项注册表项。

  • 以管理员身份打开regedit.exe
  • 导航HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
  • 创建一个名为的新项(文件夹)notepad.exe
  • 创建一个名为的新REG_SZDebugger并将其值设置为Editpad.exe可执行文件的路径。

完成。这不需要修改或删除系统的notepad.exe,但无论程序如何尝试运行它(只需尝试自己从资源管理器中双击该程序),它都会运行 EditPad。

如果你使用的是 64 位 Windows 并尝试使用 32 位程序,请改为进行更改HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\ CurrentVersion\Image File Execution Options。(此信息可在Notepad2 - 替代 Windows 记事本页。)

答案3

我已经在我的电脑上完成了这个记事本替代品。它实际上不会替换任何文件,但它确实会导致记事本所做的任何操作都使用您选择的任何程序。自从我安装了它之后,我就再也没有见过原来的记事本。卸载也可以轻松恢复所有内容。

答案4

只需在管理员模式下运行批处理文件。

  1. 右键单击批处理文件
  2. 选择“以管理员身份运行”
  3. 继续安装

如果您之前已经执行过此脚本,那么它很可能不会立即起作用,并且您需要从 %SystemRoot% 和 %SystemRoot%\System32 中删除 notepad.original.exe:

rm %SystemRoot%\notepad.original.exe
rm %SystemRoot%\System32\notepad.original.exe

请记住,您还需要在管理员模式下运行此操作,因此请将以上几行复制到文件中,并按照与上面的原始批处理文件相同的说明进行操作。

相关内容