2010-06-06 20 views
9

Như this link suggests, tôi muốn thay thế Notepad.exe với Notepad2.exe sử dụng "Image File Execution Tùy chọn" chức năng bằng cách chạy lệnhSet "Image File Execution Options" sẽ luôn luôn mở file exe có tên là mặc định

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 

Nhưng khi tôi chạy notepad nó vẫn mở file

c: \ windows \ notepad.exe

trong notepad2.exe dưới dạng tệp văn bản theo mặc định.

Có cách nào để tránh điều đó không?

Tôi biết sử dụng công nghệ Notepad.exe này sẽ là thông số đầu tiên được chuyển đến Notepad2.exe. nhưng tôi không biết làm thế nào để tránh điều này :(

+1

Điều này có thể nằm trong Serverfault – fenster

+2

Hoặc btter Superuser – beppe9000

+0

ServerFault? Đối với một câu hỏi về notepad để sử dụng? ServerFault dành cho các câu hỏi liên quan đến máy chủ và các câu hỏi notepad chắc chắn không chỉ dành riêng cho các máy chủ. SuperUser sẽ tốt hơn nhiều. – ProfK

Trả lời

1

Từ Here Thay thế Notepad của Windows với Notepad2 4.1.24 (hoặc mới hơn)

Tính đến phiên bản 4.1.24, việc phát hành chính thức của Notepad2 hỗ trợ phương pháp này để thay thế Windows Notepad, vì vậy các bước được nêu ở trên sẽ hoạt động tốt Tuy nhiên, không có hỗ trợ để thực hiện thay thế Notepad tự động, vì bản phát hành chính thức của Notepad2 sẽ không sửa đổi sổ đăng ký hệ thống. các tệp thông qua danh sách nhảy Windows 7, theo mặc định (điều này yêu cầu đăng ký các ứng dụng trong hệ thống đăng ký, trước tiên).Cũng lưu ý rằng thay thế Notepad tự động có thể có tác dụng không mong muốn nếu Notepad2 được sử dụng như một thay thế Notepad từ thiết bị di động và trạng thái ban đầu không được khôi phục khi ngắt kết nối thiết bị.

Một kịch bản hàng loạt để chạy từ thư mục Notepad2 và thay thế Notepad của Windows có thể trông như thế này (yêu cầu đặc quyền nâng cao):

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 Notepad có thể được phục hồi bằng lệnh này (yêu cầu đặc quyền nâng cao) :

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

Xác nhận kết quả bằng cách mở Regedit và nhìn vào [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe]. Chìa khóa Debugger nên chứa đường dẫn đầy đủ đến Notepad2.exe và bao gồm các dấu /z, ví dụ:

c:\local\bin\Notepad2.exe /z 
+0

Cảm ơn bạn đã trả lời. nhưng khi tôi thực thi lệnh reg add, tôi không thể chạy notepad, nói với tôi không thể tìm thấy, nếu tôi thay đổi% ~ dp0Notepad2.exe thành Notepad2.exe (tôi đặt nó vào c: \ windows \ system32), khi chạy notepad , nó mở Notepad2, nhưng, tài liệu được mở mặc định là notepad.exe, không phải cho tài liệu trống. –

+1

Tôi nghĩ lệnh thêm màu đỏ hơi phức tạp một chút. Hãy thử tạo khóa theo cách thủ công hoặc sử dụng điều này trong reg thêm làm kiểm tra:/d "c: \ utils \ Notepad2.exe/z" – fenster

+0

Sau khi chạy lệnh reg add, hãy mở sổ đăng ký và xác minh * HKLM \ ... \ Image Các tùy chọn File Execution \ notepad.exe * có đường dẫn đầy đủ tới notepad2.exe và nó có dấu */z * hoặc * -z *, ví dụ 'c: \ local \ bin \ Notepad2.exe -z'. Nếu không có Z nó sẽ mở một tài liệu trống. –

12

Mục đích của việc "gỡ rối" Điều quan trọng là để tự động khởi chạy một trình gỡ lỗi và thông qua dòng lệnh ban đầu để các debugger mong muốn . Nó cũng đặt một lá cờ trên hàm win32 CreateProcess cho biết đây là một phiên gỡ lỗi.

Nó được ngụ ý rằng trình gỡ lỗi sau đó sẽ gọi CreateProcess sau khi sửa đổi các đối số một cách thích hợp.

>notepad.exe "\document1.txt" 

biến thành

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

mydebugger sau đó có thể gọi một cái gì đó như thế này:

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

Vì vậy, giải pháp cho lạm dụng khóa registry này là để làm cho debugger giả mạo mà có thể thao tác dòng lệnh theo cách bạn mong muốn. Nó phải là một quá trình đơn giản chỉ phân tích cú pháp dòng lệnh và thay thế notepad.exe bằng notepad2.exe. Sau đó, bạn cần chỉ định sổ đăng ký đó .exe

+0

+1 để giải thích một số điều xảy ra đằng sau hiện trường –

2

Notepad Replacer sử dụng kỹ thuật này, nhưng làm cho nó cực kỳ dễ sử dụng và hoạt động với các trình chỉnh sửa không phải là trình gỡ lỗi.

+2

có mùi như thư rác, phải không?Dù sao, câu hỏi là _how_ (không _which tool_) – kleopatra

+0

@ kleopatra Tôi không nghĩ đó là thư rác. Câu trả lời không cung cấp giải pháp cho giải pháp ban đầu của OP? Ngoài ra, công cụ được liên kết dường như miễn phí. Btw, bản thân câu hỏi không phù hợp lắm với SO và nên được chuyển sang một trang web SE khác. –

+0

Tôi nghĩ câu trả lời hay nhất cho 'cách' là sử dụng công cụ mà tôi đề nghị, đó là thực tế chính xác câu trả lời được đề cao nhất (và để lại bài tập cho người đọc) 'giải pháp để lạm dụng khóa đăng ký này là làm cho trình gỡ rối giả mạo có thể thao túng dòng lệnh theo cách bạn mong muốn. Nó sẽ là một quá trình đơn giản mà chỉ cần phân tích các dòng lệnh và thay thế notepad.exe bằng notepad2.exe. Sau đó, bạn cần phải đăng ký vào đó .exe' – user3484801

4

Đối với Notepad ++, để workaround "notepad.exe" được đưa vào dưới dạng tài liệu tạo tệp loạt trình khởi chạy đơn giản (xem câu trả lời của @ Ben vì lý do), rồi trỏ trình gỡ lỗi hình ảnh vào đó (a la @ fenster's câu trả lời).

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 

Thêm vào registry:

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 
0

tôi sử dụng các tập tin batch sau để mở emacs thay vì notepad. Tôi cũng đã bao gồm một tham số để bỏ qua nó để tôi vẫn có thể sử dụng notepad khi tôi muốn. ví dụ. chỉnh sửa các tập tin host từ một dấu nhắc lệnh nâng lên:

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

Đặt một nơi nào đó trên con đường và chỉnh sửa dòng cuối cùng để mở trình soạn thảo văn bản của bạn:

@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!" 

bộ nó để thay thế notepad sử dụng lệnh này:

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" 

hoặc chỉ cần gọi kịch bản như thế này:

SCRIPT JUNK --NOTEPAD 

nên gọi notepad, nhưng thay thế bằng tập lệnh này sau đó

Các vấn đề liên quan