| Left: | ||
| Right: |
| LEFT | RIGHT |
|---|---|
| 1 # | 1 # |
| 2 # NMAKE is a 32-bit application, which makes it problematic to make 64-bit regis try entries with the standard command-line tools such as "reg.exe". | 2 # NMAKE is a 32-bit application, which makes it problematic to make 64-bit regis try entries with the standard command-line tools such as "reg.exe". |
| 3 # As a 32-bit application, when it loads "reg.exe" from the ordinary directory, %WINDIR%\System32, the WOW64 system redirects it load from %WINDIR%\SysWOW64. | 3 # As a 32-bit application, when it loads "reg.exe" from the ordinary directory, %WINDIR%\System32, the WOW64 system redirects it load from %WINDIR%\SysWOW64. |
| 4 # So even if you explicitly put in the 64-bit path, because NMAKE is 32-bit it w ill load the 32-bit version anyway. | 4 # So even if you explicitly put in the 64-bit path, because NMAKE is 32-bit it w ill load the 32-bit version anyway. |
| 5 # To get around this, we check for the existence of %WINDIR%\sysnative\reg.exe, which if present means a few things. | 5 # To get around this, we check for the existence of %WINDIR%\sysnative\reg.exe, which if present means a few things. |
| 6 # -- 1. We're running on Windows Vista or later, because 64-bit XP doesn't have "sysnative." | 6 # -- 1. We're running on Windows Vista or later, because 64-bit XP doesn't have "sysnative." |
| 7 # -- 2. We're running on a 64-bit version of Windows. | 7 # -- 2. We're running on a 64-bit version of Windows. |
| 8 # -- 3. We're running from a 32-bit process, which should always be true about N MAKE. | 8 # -- 3. We're running from a 32-bit process, which should always be true about N MAKE. |
| 9 # | 9 # |
| 10 # See http://ovidiupl.wordpress.com/2008/07/11/useful-wow64-file-system-trick/ f or more details. | 10 # See http://ovidiupl.wordpress.com/2008/07/11/useful-wow64-file-system-trick/ f or more details. |
| 11 # | 11 # |
| 12 !if [cmd /c if exist %WINDIR%\sysnative\reg.exe exit /b 1] | 12 !if [cmd /c if exist %WINDIR%\sysnative\reg.exe exit /b 1] |
| 13 REG=$(WINDIR)\sysnative\reg.exe | 13 REG=$(WINDIR)\sysnative\reg.exe |
| 14 X64=1 | 14 X64=1 |
| 15 !else | 15 !else |
| 16 REG=$(WINDIR)\reg.exe | 16 REG=$(WINDIR)\reg.exe |
| 17 !message Warning: Developer installation not tested on XP or 32-bit Windows. | 17 !message Warning: Developer installation not tested on XP or 32-bit Windows. |
| 18 !endif | 18 !endif |
| 19 | 19 |
| 20 !message DLL=$(DLL) | 20 !message DLL=$(DLL) |
| 21 | 21 |
| 22 # | 22 # |
| 23 # Default (first) target is a help message, in case anybody runs it outside Visu al Studio. | 23 # Default (first) target is a help message, in case anybody runs it outside Visu al Studio. |
| 24 # | 24 # |
| 25 help: | 25 help: |
| 26 @echo This Makefile is intended to be run from within Visual Studio to p rovide developer installations of Adblock Plus for IE. | 26 @echo This Makefile is intended to be run from within Visual Studio to p rovide developer installations of Adblock Plus for IE. |
| 27 | 27 |
| 28 build64: register64 check_BHO copy | 28 build64: register64 check_BHO64 copy |
| 29 | 29 |
| 30 rebuild64: clean64 build64 | 30 rebuild64: clean64 build64 |
| 31 | 31 |
| 32 build32: register32 check_BHO copy | 32 build32: register32 check_BHO32 copy |
| 33 | 33 |
| 34 rebuild32: clean32 build32 | 34 rebuild32: clean32 build32 |
| 35 | 35 |
| 36 # | 36 # |
| 37 # We're using "reg.exe" for the HKCU keys because the one with the DLL path name would need to be backslash-quoted to go into a .REG file. | 37 # We're using "reg.exe" for the HKCU keys because the one with the DLL path name would need to be backslash-quoted to go into a .REG file. |
| 38 # | 38 # |
| 39 # Note that the CLSID is register in HKCU, which avoids the need to elevate with UAC to high integrity in order to write. | 39 # Note that the CLSID is register in HKCU, which avoids the need to elevate with UAC to high integrity in order to write. |
| 40 # Also note that the "Browser Helper Object" key is in HKLM, which is required b ecause of IE. | 40 # Also note that the "Browser Helper Object" key is in HKLM, which is required b ecause of IE. |
| 41 # IE only scans in HKLM for BHO entries. | 41 # IE only scans in HKLM for BHO entries. |
| 42 # IE does not scan HKCU for BHO entries, contrary to some sources online. | 42 # IE does not scan HKCU for BHO entries, contrary to some sources online. |
| 43 # The tale for this is that it would be a security violation to allow an Adminis trator to run a BHO from HKCU, | 43 # The tale for this is that it would be a security violation to allow an Adminis trator to run a BHO from HKCU, |
| 44 # since anything might have written to HKCU (a low-integrity part of the regi stry). | 44 # since anything might have written to HKCU (a low-integrity part of the regi stry). |
| 45 # On the other hand, IE could just run low-integrity BHO in a low-integrity cont ainer, but no, it can't do that. | 45 # On the other hand, IE could just run low-integrity BHO in a low-integrity cont ainer, but no, it can't do that. |
| 46 # | 46 # |
| 47 register64: | 47 register64: |
| 48 @echo Start 'register' action. | 48 @echo Start 'register' action. |
| 49 $(REG) add HKCU\Software\Classes\CLSID\{FFCB3198-32F3-4E8B-9539-4324694E D664} /ve /d "Adblock Plus for IE Browser Helper Object" /f >nul | 49 $(REG) add HKCU\Software\Classes\CLSID\{FFCB3198-32F3-4E8B-9539-4324694E D664} /ve /d "Adblock Plus for IE Browser Helper Object" /f >nul |
| 50 $(REG) add HKCU\Software\Classes\CLSID\{FFCB3198-32F3-4E8B-9539-4324694E D664}\InprocServer32 /ve /d "$(DLL)" /f >nul | 50 $(REG) add HKCU\Software\Classes\CLSID\{FFCB3198-32F3-4E8B-9539-4324694E D664}\InprocServer32 /ve /d "$(DLL)" /f >nul |
| 51 $(REG) add HKCU\Software\Classes\CLSID\{FFCB3198-32F3-4E8B-9539-4324694E D664}\InprocServer32 /v ThreadingModel /d "Both" /f >nul | 51 $(REG) add HKCU\Software\Classes\CLSID\{FFCB3198-32F3-4E8B-9539-4324694E D664}\InprocServer32 /v ThreadingModel /d "Both" /f >nul |
| 52 @date /t >"$(OutDir)registered.timestamp.txt" | 52 @date /t >"$(OutDir)registered.timestamp.txt" |
| 53 @time /t >>"$(OutDir)registered.timestamp.txt" | 53 @time /t >>"$(OutDir)registered.timestamp.txt" |
| 54 | 54 |
| 55 # | 55 # |
| 56 # This is exactly the same as 'register64' except it does not use the $(REG) mac ro but rather just 'reg' | 56 # This is exactly the same as 'register64' except it does not use the $(REG) mac ro but rather just 'reg' |
| 57 # On 64-bit Windows, invoking it this way ends up with the 32-bit version of 're g'. | 57 # On 64-bit Windows, invoking it this way ends up with the 32-bit version of 're g'. |
|
Wladimir Palant
2013/06/20 07:10:38
How about renaming the current REG variable into R
Eric
2013/06/20 14:13:47
I want to disagree with one thing. Nothing is ever
| |
| 58 # See above about 'sysnative' for why that is. | 58 # See above about 'sysnative' for why that is. |
| 59 # On 32-bit Windows, it does what you'd expect. | 59 # On 32-bit Windows, it does what you'd expect. |
| 60 # Thus we can use this for 32-bit build targets on both 32- and 64-bit Windows. | 60 # Thus we can use this for 32-bit build targets on both 32- and 64-bit Windows. |
| 61 # | 61 # |
| 62 register32: | 62 register32: |
| 63 @echo Start 'register' action. | 63 @echo Start 'register' action. |
| 64 reg add HKCU\Software\Classes\CLSID\{FFCB3198-32F3-4E8B-9539-4324694ED66 4} /ve /d "Adblock Plus for IE Browser Helper Object" /f >nul | 64 reg add HKCU\Software\Classes\CLSID\{FFCB3198-32F3-4E8B-9539-4324694ED66 4} /ve /d "Adblock Plus for IE Browser Helper Object" /f >nul |
| 65 reg add HKCU\Software\Classes\CLSID\{FFCB3198-32F3-4E8B-9539-4324694ED66 4}\InprocServer32 /ve /d "$(DLL)" /f >nul | 65 reg add HKCU\Software\Classes\CLSID\{FFCB3198-32F3-4E8B-9539-4324694ED66 4}\InprocServer32 /ve /d "$(DLL)" /f >nul |
| 66 reg add HKCU\Software\Classes\CLSID\{FFCB3198-32F3-4E8B-9539-4324694ED66 4}\InprocServer32 /v ThreadingModel /d "Both" /f >nul | 66 reg add HKCU\Software\Classes\CLSID\{FFCB3198-32F3-4E8B-9539-4324694ED66 4}\InprocServer32 /v ThreadingModel /d "Both" /f >nul |
| 67 @date /t >"$(OutDir)registered.timestamp.txt" | 67 @date /t >"$(OutDir)registered.timestamp.txt" |
| 68 @time /t >>"$(OutDir)registered.timestamp.txt" | 68 @time /t >>"$(OutDir)registered.timestamp.txt" |
| 69 | 69 |
| 70 # | 70 # |
| 71 # Fortuitously, the warning message below is actually parsed by Visual Studio an d show up with a yellow flag in the error list. | 71 # Fortuitously, the warning message below is actually parsed by Visual Studio an d show up with a yellow flag in the error list. |
| 72 # | 72 # |
| 73 check_BHO: | 73 check_BHO64: |
| 74 !if [$(REG) query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ Explorer\Browser Helper Objects\{FFCB3198-32F3-4E8B-9539-4324694ED664}" 2>&1 >nu l] | 74 !if [$(REG) query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ Explorer\Browser Helper Objects\{FFCB3198-32F3-4E8B-9539-4324694ED664}" 2>&1 >nu l] |
|
Wladimir Palant
2013/06/20 07:10:38
What about HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node
Eric
2013/06/20 14:13:47
You're correct. I also need to add it to the query
| |
| 75 @echo Warning: BHO key not registered. IE cannot find the plugin unless the BHO key is present in the registry. Use "BHO_add.reg" to add the key. | |
| 76 !endif | |
| 77 | |
| 78 check_BHO32: | |
| 79 !if [reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Exp lorer\Browser Helper Objects\{FFCB3198-32F3-4E8B-9539-4324694ED664}" 2>&1 >nul] | |
| 75 @echo Warning: BHO key not registered. IE cannot find the plugin unless the BHO key is present in the registry. Use "BHO_add.reg" to add the key. | 80 @echo Warning: BHO key not registered. IE cannot find the plugin unless the BHO key is present in the registry. Use "BHO_add.reg" to add the key. |
| 76 !endif | 81 !endif |
| 77 | 82 |
| 78 copy: | 83 copy: |
| 79 @echo Copying files | 84 @echo Copying files |
| 80 copy "$(ProjectDir)files\settings.ini" "$(OutDir)settings.ini" | 85 copy "$(ProjectDir)files\settings.ini" "$(OutDir)settings.ini" |
| 81 xcopy /s /I /y /D "$(ProjectDir)html\*" "$(OutDir)html" | 86 xcopy /s /I /y /D "$(ProjectDir)html\*" "$(OutDir)html" |
| 82 xcopy /s /I /y /D "$(ProjectDir)locales\*" "$(OutDir)locales" | 87 xcopy /s /I /y /D "$(ProjectDir)locales\*" "$(OutDir)locales" |
| 83 @date /t >"$(OutDir)copied.timestamp.txt" | 88 @date /t >"$(OutDir)copied.timestamp.txt" |
| 84 @time /t >>"$(OutDir)copied.timestamp.txt" | 89 @time /t >>"$(OutDir)copied.timestamp.txt" |
| 85 | 90 |
| 86 # | 91 # |
| 87 # N.B. We don't delete the CLSID in HKLM for clean. That wouldn't be our key, bu t the installer's. | 92 # N.B. We don't delete the CLSID in HKLM for clean. That wouldn't be our key, bu t the installer's. |
|
Wladimir Palant
2013/06/20 07:10:38
IMHO, since this is about the development environm
Eric
2013/06/20 14:13:47
There are three reasons not to delete installer ke
| |
| 88 # | 93 # |
| 89 clean64: | 94 clean64: |
| 90 $(REG) delete HKCU\Software\Classes\CLSID\{FFCB3198-32F3-4E8B-9539-43246 94ED664} /f | 95 $(REG) delete HKCU\Software\Classes\CLSID\{FFCB3198-32F3-4E8B-9539-43246 94ED664} /f |
| 91 | 96 |
| 92 clean32: | 97 clean32: |
| 93 reg delete HKCU\Software\Classes\CLSID\{FFCB3198-32F3-4E8B-9539-4324694E D664} /f | 98 reg delete HKCU\Software\Classes\CLSID\{FFCB3198-32F3-4E8B-9539-4324694E D664} /f |
| 94 | 99 |
| 95 # | 100 # |
| 96 # This utility queries all the registry locations that might be present either i n a developer install or a regular one. | 101 # This utility queries all the registry locations that might be present either i n a developer install or a regular one. |
| 97 # The '-' annotation means to ignore the error code. '2>nul' means to ignore any error text. It's not an error for a registry key to be absent. | 102 # The '-' annotation means to ignore the error code. '2>nul' means to ignore any error text. It's not an error for a registry key to be absent. |
| 98 # The BHO key is only relevant in HKLM. The CLSID keys may be either in HKLM or HKCU. | 103 # The BHO key is only relevant in HKLM. The CLSID keys may be either in HKLM or HKCU. |
| 99 # | 104 # |
| 100 query: | 105 query: |
| 101 # BHO key | 106 # BHO key |
| 102 -@$(REG) query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVer sion\Explorer\Browser Helper Objects\{FFCB3198-32F3-4E8B-9539-4324694ED664}" 2>n ul | 107 -@$(REG) query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVer sion\Explorer\Browser Helper Objects\{FFCB3198-32F3-4E8B-9539-4324694ED664}" 2>n ul |
| 103 # Native platform keys | 108 # Native platform keys |
| 104 -@$(REG) query HKLM\Software\Classes\CLSID\{FFCB3198-32F3-4E8B-9539-4324 694ED664} /ve 2>nul | 109 -@$(REG) query HKLM\Software\Classes\CLSID\{FFCB3198-32F3-4E8B-9539-4324 694ED664} /ve 2>nul |
| 105 -@$(REG) query HKLM\Software\Classes\CLSID\{FFCB3198-32F3-4E8B-9539-4324 694ED664}\InprocServer32 2>nul | 110 -@$(REG) query HKLM\Software\Classes\CLSID\{FFCB3198-32F3-4E8B-9539-4324 694ED664}\InprocServer32 2>nul |
| 106 -@$(REG) query HKCU\Software\Classes\CLSID\{FFCB3198-32F3-4E8B-9539-4324 694ED664} /ve 2>nul | 111 -@$(REG) query HKCU\Software\Classes\CLSID\{FFCB3198-32F3-4E8B-9539-4324 694ED664} /ve 2>nul |
| 107 -@$(REG) query HKCU\Software\Classes\CLSID\{FFCB3198-32F3-4E8B-9539-4324 694ED664}\InprocServer32 2>nul | 112 -@$(REG) query HKCU\Software\Classes\CLSID\{FFCB3198-32F3-4E8B-9539-4324 694ED664}\InprocServer32 2>nul |
| 108 !ifdef X64 | 113 !ifdef X64 |
| 109 # WoW64 keys | 114 # WoW64 keys |
| 110 -@$(REG) query HKLM\Software\Wow6432Node\Classes\CLSID\{FFCB3198-32F3-4E 8B-9539-4324694ED664} /ve 2>nul | 115 -@$(REG) query HKLM\Software\Wow6432Node\Classes\CLSID\{FFCB3198-32F3-4E 8B-9539-4324694ED664} /ve 2>nul |
| 111 -@$(REG) query HKLM\Software\Wow6432Node\Classes\CLSID\{FFCB3198-32F3-4E 8B-9539-4324694ED664}\InprocServer32 2>nul | 116 -@$(REG) query HKLM\Software\Wow6432Node\Classes\CLSID\{FFCB3198-32F3-4E 8B-9539-4324694ED664}\InprocServer32 2>nul |
| 112 -@$(REG) query HKCU\Software\Wow6432Node\Classes\CLSID\{FFCB3198-32F3-4E 8B-9539-4324694ED664} /ve 2>nul | 117 -@$(REG) query HKCU\Software\Wow6432Node\Classes\CLSID\{FFCB3198-32F3-4E 8B-9539-4324694ED664} /ve 2>nul |
| 113 -@$(REG) query HKCU\Software\Wow6432Node\Classes\CLSID\{FFCB3198-32F3-4E 8B-9539-4324694ED664}\InprocServer32 2>nul | 118 -@$(REG) query HKCU\Software\Wow6432Node\Classes\CLSID\{FFCB3198-32F3-4E 8B-9539-4324694ED664}\InprocServer32 2>nul |
| 114 !endif | 119 !endif |
| LEFT | RIGHT |