好的,我真的真的想要用 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 建议的操作与下面类似自动地。请先尝试一下,除非您有理由避免这样做,例如应用程序正在闭源。此时,您可以使用以下方法:
使用以下代码创建一个批处理文件。该批处理文件可以命名为替换器例如,它可以放在任何地方,例如 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"=%
- 警告!START 命令后必须有一个空字符串
(选修的)使用批处理到 Exe 转换器将批处理文件编译为可执行程序。选择“不可见应用程序”选项。
- 如果你不想使用批处理到 Exe 转换器,您可以使用其他解决方案,或者您可以使用批处理文件本身来执行以下步骤,而不是使用编译后的
EXE
文件。但是,如果您使用批处理文件本身,您将在 EditPad 打开之前看到命令窗口瞬间闪烁。
- 如果你不想使用批处理到 Exe 转换器,您可以使用其他解决方案,或者您可以使用批处理文件本身来执行以下步骤,而不是使用编译后的
打开注册表编辑器通过打开“开始”菜单并搜索
regedit
(或使用运行命令来运行regedit
)。导航
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
notepad.exe
如果其中不存在名为的项(左窗格中的文件夹)Image File Execution Options
,请单击编辑 > 新建 > 键并输入notepad.exe
新键的名称。如果该键已存在,则只需导航到该键即可。如果右侧的键
Debugger
中不存在名为 (类型 REG_SZ) 的条目,请单击notepad.exe
编辑 > 新建 > 字符串值并输入Debugger
新条目的名称。双击命名的条目
Debugger
并输入生成的 EXE 文件的完整限定位置和名称批处理到 Exe 转换器 或者如果您没有使用编译器,则批处理文件。将位置括在引号中。- 例如,假设您已将批处理文件存储在 EditPad 的程序文件夹中,则 Debugger 条目的值可能是
"C:\Program Files\EditPad\Replacer.bat"
或者"C:\Program Files\EditPad\Replacer.exe"
其中 Replacer.bat 是批处理文件,Replacer.exe 是在步骤 2 中获得的编译后的 EXE 文件(如果有)。
- 例如,假设您已将批处理文件存储在 EditPad 的程序文件夹中,则 Debugger 条目的值可能是
通过以下方式测试设置:
- 从“开始”菜单打开 Windows 记事本。应该会打开 EditPad。
- 双击文本文件或任何与 Windows 记事本关联的文件。
- 测试其他您知道应该正常打开 Windows 记事本的方法。它们很可能会打开 EditPad。
如果出现任何问题,则可能是您在第 1 步中创建的批处理文件中的路径不正确。如果您正确执行了其他步骤,则其他所有步骤都应该没有问题。只需验证并更正批处理文件中的路径(并根据需要重新编译 EXE)。
答案2
使用图像文件执行选项注册表项。
- 以管理员身份打开
regedit.exe
。 - 导航
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
- 创建一个名为的新项(文件夹)
notepad.exe
- 创建一个名为的新
REG_SZ
值Debugger
并将其值设置为Editpad.exe
可执行文件的路径。
完成。这不需要修改或删除系统的notepad.exe
,但无论程序如何尝试运行它(只需尝试自己从资源管理器中双击该程序),它都会运行 EditPad。
如果你使用的是 64 位 Windows 并尝试使用 32 位程序,请改为进行更改HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\ CurrentVersion\Image File Execution Options
。(此信息可在Notepad2 - 替代 Windows 记事本页。)
答案3
我已经在我的电脑上完成了这个记事本替代品。它实际上不会替换任何文件,但它确实会导致记事本所做的任何操作都使用您选择的任何程序。自从我安装了它之后,我就再也没有见过原来的记事本。卸载也可以轻松恢复所有内容。
答案4
只需在管理员模式下运行批处理文件。
- 右键单击批处理文件
- 选择“以管理员身份运行”
- 继续安装
如果您之前已经执行过此脚本,那么它很可能不会立即起作用,并且您需要从 %SystemRoot% 和 %SystemRoot%\System32 中删除 notepad.original.exe:
rm %SystemRoot%\notepad.original.exe
rm %SystemRoot%\System32\notepad.original.exe
请记住,您还需要在管理员模式下运行此操作,因此请将以上几行复制到文件中,并按照与上面的原始批处理文件相同的说明进行操作。