mirror of
https://github.com/janet-lang/janet
synced 2024-11-24 17:27:18 +00:00
Update windows installation and automation.
This commit is contained in:
parent
da5a64131f
commit
7e97687c9e
@ -18,11 +18,8 @@ init:
|
|||||||
- call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
|
- call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- build_win
|
|
||||||
- build_win test
|
|
||||||
- choco install nsis -y -pre
|
- choco install nsis -y -pre
|
||||||
- build_win dist
|
- build_win all
|
||||||
|
|
||||||
build: off
|
build: off
|
||||||
|
|
||||||
only_commits:
|
only_commits:
|
||||||
@ -31,7 +28,7 @@ only_commits:
|
|||||||
- src/
|
- src/
|
||||||
|
|
||||||
artifacts:
|
artifacts:
|
||||||
- path: janet-installer.exe
|
- path: janet-v1.2.0-windows-installer.exe
|
||||||
name: janet-v1.2.0-windows-installer.exe
|
name: janet-v1.2.0-windows-installer.exe
|
||||||
type: File
|
type: File
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@
|
|||||||
|
|
||||||
(def default-compiler (if is-win "cl" "cc"))
|
(def default-compiler (if is-win "cl" "cc"))
|
||||||
(def default-linker (if is-win "link" "cc"))
|
(def default-linker (if is-win "link" "cc"))
|
||||||
(def default-archiver (if is-win "link" "ar"))
|
(def default-archiver (if is-win "lib" "ar"))
|
||||||
|
|
||||||
# Default flags for natives, but not required
|
# Default flags for natives, but not required
|
||||||
(def default-lflags (if is-win ["/nologo"] []))
|
(def default-lflags (if is-win ["/nologo"] []))
|
||||||
@ -277,7 +277,7 @@
|
|||||||
(error "cannot find libpath: provide --libpath or JANET_LIBPATH"))
|
(error "cannot find libpath: provide --libpath or JANET_LIBPATH"))
|
||||||
(string (dyn :libpath JANET_LIBPATH)
|
(string (dyn :libpath JANET_LIBPATH)
|
||||||
sep
|
sep
|
||||||
"libjanet.a"))
|
(if is-win "libjanet.lib" "libjanet.a")))
|
||||||
|
|
||||||
(defn- win-import-library
|
(defn- win-import-library
|
||||||
"On windows, an import library is needed to link to a dll statically."
|
"On windows, an import library is needed to link to a dll statically."
|
||||||
@ -314,7 +314,7 @@
|
|||||||
(rule target objects
|
(rule target objects
|
||||||
(print "creating static library " target "...")
|
(print "creating static library " target "...")
|
||||||
(if is-win
|
(if is-win
|
||||||
(shell ar "/lib" "/nologo" (string "/out:" target) ;objects)
|
(shell ar "/nologo" (string "/out:" target) ;objects)
|
||||||
(shell ar "rcs" target ;objects))))
|
(shell ar "rcs" target ;objects))))
|
||||||
|
|
||||||
(defn- create-buffer-c-impl
|
(defn- create-buffer-c-impl
|
||||||
@ -456,9 +456,9 @@ int main(int argc, const char **argv) {
|
|||||||
(try (rm path) ([err]
|
(try (rm path) ([err]
|
||||||
(unless (= err "No such file or directory")
|
(unless (= err "No such file or directory")
|
||||||
(error err)))))
|
(error err)))))
|
||||||
|
(:close f)
|
||||||
(print "removing " manifest)
|
(print "removing " manifest)
|
||||||
(rm manifest)
|
(rm manifest)
|
||||||
(:close f)
|
|
||||||
(print "Uninstalled."))
|
(print "Uninstalled."))
|
||||||
|
|
||||||
(defn clear-cache
|
(defn clear-cache
|
||||||
|
@ -14,10 +14,12 @@
|
|||||||
@if "%1"=="test" goto TEST
|
@if "%1"=="test" goto TEST
|
||||||
@if "%1"=="dist" goto DIST
|
@if "%1"=="dist" goto DIST
|
||||||
@if "%1"=="install" goto INSTALL
|
@if "%1"=="install" goto INSTALL
|
||||||
|
@if "%1"=="test-install" goto TESTINSTALL
|
||||||
|
@if "%1"=="all" goto ALL
|
||||||
|
|
||||||
@rem Set compile and link options here
|
@rem Set compile and link options here
|
||||||
@setlocal
|
@setlocal
|
||||||
@set JANET_COMPILE=cl /nologo /Isrc\include /Isrc\conf /c /O2 /W3 /LD /D_CRT_SECURE_NO_WARNINGS
|
@set JANET_COMPILE=cl /nologo /Isrc\include /Isrc\conf /c /O2 /W3 /D_CRT_SECURE_NO_WARNINGS
|
||||||
@set JANET_LINK=link /nologo
|
@set JANET_LINK=link /nologo
|
||||||
@set JANET_LINK_STATIC=lib /nologo
|
@set JANET_LINK_STATIC=lib /nologo
|
||||||
|
|
||||||
@ -81,12 +83,8 @@ for %%f in (src\mainclient\*.c) do (
|
|||||||
@if errorlevel 1 goto :BUILDFAIL
|
@if errorlevel 1 goto :BUILDFAIL
|
||||||
|
|
||||||
@rem Build static library (libjanet.a)
|
@rem Build static library (libjanet.a)
|
||||||
@rem %JANET_LINK_STATIC% /out:build\libjanet.a build\core\*.obj build\core_image.obj
|
%JANET_LINK_STATIC% /out:build\libjanet.lib build\core\*.obj build\core_image.obj
|
||||||
@rem @if errorlevel 1 goto :BUILDFAIL
|
@if errorlevel 1 goto :BUILDFAIL
|
||||||
|
|
||||||
@rem Build dynamic library (janet.dll)
|
|
||||||
@rem %JANET_LINK% /out:build\janet.dll /dll build\core\*.obj build\core_image.obj
|
|
||||||
@rem @if errorlevel 1 goto :BUILDFAIL
|
|
||||||
|
|
||||||
@rem Gen amlag
|
@rem Gen amlag
|
||||||
setlocal enabledelayedexpansion
|
setlocal enabledelayedexpansion
|
||||||
@ -94,7 +92,7 @@ set "amalg_files="
|
|||||||
for %%f in (src\core\*.c) do (
|
for %%f in (src\core\*.c) do (
|
||||||
set "amalg_files=!amalg_files! %%f"
|
set "amalg_files=!amalg_files! %%f"
|
||||||
)
|
)
|
||||||
build\janet.exe tools\amalg.janet src\core\util.h src\core\state.h src\core\gc.h src\core\vector.h src\core\fiber.h src\core\regalloc.h src\core\compile.h src\core\emit.h src\core\symcache.h %amalg_files% build\core_image.c > build\janet.c
|
janet.exe tools\amalg.janet src\core\util.h src\core\state.h src\core\gc.h src\core\vector.h src\core\fiber.h src\core\regalloc.h src\core\compile.h src\core\emit.h src\core\symcache.h %amalg_files% build\core_image.c > build\janet.c
|
||||||
|
|
||||||
echo === Successfully built janet.exe for Windows ===
|
echo === Successfully built janet.exe for Windows ===
|
||||||
echo === Run 'build_win test' to run tests. ==
|
echo === Run 'build_win test' to run tests. ==
|
||||||
@ -126,7 +124,7 @@ exit /b 0
|
|||||||
:TEST
|
:TEST
|
||||||
for %%f in (test/suite*.janet) do (
|
for %%f in (test/suite*.janet) do (
|
||||||
janet.exe test\%%f
|
janet.exe test\%%f
|
||||||
@if errorlevel 1 goto :TESTFAIL
|
@if errorlevel 1 goto TESTFAIL
|
||||||
)
|
)
|
||||||
exit /b 0
|
exit /b 0
|
||||||
|
|
||||||
@ -145,9 +143,7 @@ copy janet.exp dist\janet.exp
|
|||||||
|
|
||||||
copy src\include\janet.h dist\janet.h
|
copy src\include\janet.h dist\janet.h
|
||||||
copy src\conf\janetconf.h dist\janetconf.h
|
copy src\conf\janetconf.h dist\janetconf.h
|
||||||
|
copy build\libjanet.lib dist\libjanet.lib
|
||||||
@rem copy build\janet.dll dist\janet.dll
|
|
||||||
@rem copy build\libjanet.a dist\libjanet.a
|
|
||||||
|
|
||||||
copy auxlib\cook.janet dist\cook.janet
|
copy auxlib\cook.janet dist\cook.janet
|
||||||
copy auxlib\path.janet dist\path.janet
|
copy auxlib\path.janet dist\path.janet
|
||||||
@ -159,13 +155,39 @@ copy tools\jpm.bat dist\jpm.bat
|
|||||||
"C:\Program Files (x86)\NSIS\makensis.exe" janet-installer.nsi
|
"C:\Program Files (x86)\NSIS\makensis.exe" janet-installer.nsi
|
||||||
exit /b 0
|
exit /b 0
|
||||||
|
|
||||||
:INSTALL
|
|
||||||
@rem Run the installer. (Installs to the local user with default settings)
|
@rem Run the installer. (Installs to the local user with default settings)
|
||||||
|
:INSTALL
|
||||||
|
@echo Running Installer...
|
||||||
FOR %%a in (janet-*-windows-installer.exe) DO (
|
FOR %%a in (janet-*-windows-installer.exe) DO (
|
||||||
%%a /S /D=%userprofile%\AppData\Local\Janet\
|
%%a /S /D=%userprofile%\AppData\Local\Janet\
|
||||||
)
|
)
|
||||||
exit /b 0
|
exit /b 0
|
||||||
|
|
||||||
|
@rem Test the installation.
|
||||||
|
:TESTINSTALL
|
||||||
|
pushd test\install
|
||||||
|
call jpm clean
|
||||||
|
@if errorlevel 1 goto :TESTFAIL
|
||||||
|
call jpm test
|
||||||
|
@if errorlevel 1 goto :TESTFAIL
|
||||||
|
popd
|
||||||
|
exit /b 0
|
||||||
|
|
||||||
|
@rem build, test, dist, install. Useful for local dev.
|
||||||
|
:ALL
|
||||||
|
call %0 build
|
||||||
|
@if errorlevel 1 exit /b 1
|
||||||
|
call %0 test
|
||||||
|
@if errorlevel 1 exit /b 1
|
||||||
|
call %0 dist
|
||||||
|
@if errorlevel 1 exit /b 1
|
||||||
|
call %0 install
|
||||||
|
@if errorlevel 1 exit /b 1
|
||||||
|
call %0 test-install
|
||||||
|
@if errorlevel 1 exit /b 1
|
||||||
|
@echo Done!
|
||||||
|
exit /b 0
|
||||||
|
|
||||||
:TESTFAIL
|
:TESTFAIL
|
||||||
@echo.
|
@echo.
|
||||||
@echo *******************************************************
|
@echo *******************************************************
|
||||||
|
@ -20,6 +20,7 @@ VIFileVersion "${PRODUCT_VERSION}"
|
|||||||
!include "MUI2.nsh"
|
!include "MUI2.nsh"
|
||||||
!include ".\tools\EnvVarUpdate.nsh"
|
!include ".\tools\EnvVarUpdate.nsh"
|
||||||
!include "LogicLib.nsh"
|
!include "LogicLib.nsh"
|
||||||
|
!include "./tools\FileAssociation.nsh"
|
||||||
|
|
||||||
# Basics
|
# Basics
|
||||||
Name "Janet"
|
Name "Janet"
|
||||||
@ -99,8 +100,7 @@ section "Janet" BfWSection
|
|||||||
file /oname=C\janet.lib dist\janet.lib
|
file /oname=C\janet.lib dist\janet.lib
|
||||||
file /oname=C\janet.exp dist\janet.exp
|
file /oname=C\janet.exp dist\janet.exp
|
||||||
file /oname=C\janet.c dist\janet.c
|
file /oname=C\janet.c dist\janet.c
|
||||||
#file /oname=C\janet.dll dist\janet.dll
|
file /oname=C\libjanet.lib dist\libjanet.lib
|
||||||
#file /oname=C\libjanet.a dist\libjanet.a
|
|
||||||
|
|
||||||
# Documentation
|
# Documentation
|
||||||
file /oname=docs\docs.html dist\doc.html
|
file /oname=docs\docs.html dist\doc.html
|
||||||
@ -126,6 +126,9 @@ section "Janet" BfWSection
|
|||||||
# Update path
|
# Update path
|
||||||
${EnvVarUpdate} $0 "PATH" "A" "HKCU" "$INSTDIR\bin" ; Append
|
${EnvVarUpdate} $0 "PATH" "A" "HKCU" "$INSTDIR\bin" ; Append
|
||||||
${EnvVarUpdate} $0 "PATH" "A" "HKLM" "$INSTDIR\bin" ; Append
|
${EnvVarUpdate} $0 "PATH" "A" "HKLM" "$INSTDIR\bin" ; Append
|
||||||
|
|
||||||
|
# File Assocations
|
||||||
|
${RegisterExtension} "$INSTDIR\bin\janet.exe" ".janet" "Janet Source File"
|
||||||
|
|
||||||
# Registry information for add/remove programs
|
# Registry information for add/remove programs
|
||||||
WriteRegStr SHCTX "${UNINST_KEY}" "DisplayName" "Janet"
|
WriteRegStr SHCTX "${UNINST_KEY}" "DisplayName" "Janet"
|
||||||
@ -174,6 +177,9 @@ section "uninstall"
|
|||||||
# Unset PATH
|
# Unset PATH
|
||||||
${un.EnvVarUpdate} $0 "PATH" "R" "HKCU" "$INSTDIR\bin" ; Remove
|
${un.EnvVarUpdate} $0 "PATH" "R" "HKCU" "$INSTDIR\bin" ; Remove
|
||||||
${un.EnvVarUpdate} $0 "PATH" "R" "HKLM" "$INSTDIR\bin" ; Remove
|
${un.EnvVarUpdate} $0 "PATH" "R" "HKLM" "$INSTDIR\bin" ; Remove
|
||||||
|
|
||||||
|
# File Associations
|
||||||
|
${UnRegisterExtension} ".janet" "Janet Source File"
|
||||||
|
|
||||||
# make sure windows knows about the change
|
# make sure windows knows about the change
|
||||||
SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
|
SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
|
||||||
|
@ -45,7 +45,14 @@ typedef int Clib;
|
|||||||
typedef HINSTANCE Clib;
|
typedef HINSTANCE Clib;
|
||||||
#define load_clib(name) LoadLibrary((name))
|
#define load_clib(name) LoadLibrary((name))
|
||||||
#define symbol_clib(lib, sym) GetProcAddress((lib), (sym))
|
#define symbol_clib(lib, sym) GetProcAddress((lib), (sym))
|
||||||
#define error_clib() "could not load dynamic library"
|
static char error_clib_buf[256];
|
||||||
|
static char *error_clib(void) {
|
||||||
|
FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||||
|
NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||||
|
error_clib_buf, sizeof(error_clib_buf), NULL);
|
||||||
|
error_clib_buf[strlen(error_clib_buf) - 1] = '\0';
|
||||||
|
return error_clib_buf;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
typedef void *Clib;
|
typedef void *Clib;
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#include <shlwapi.h>
|
||||||
#ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING
|
#ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING
|
||||||
#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
|
#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
|
||||||
#endif
|
#endif
|
||||||
@ -38,14 +39,33 @@ int main(int argc, char **argv) {
|
|||||||
JanetArray *args;
|
JanetArray *args;
|
||||||
JanetTable *env;
|
JanetTable *env;
|
||||||
|
|
||||||
/* Enable color console on windows 10 console and utf8 output. */
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
/* Enable color console on windows 10 console and utf8 output. */
|
||||||
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
|
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||||
DWORD dwMode = 0;
|
DWORD dwMode = 0;
|
||||||
GetConsoleMode(hOut, &dwMode);
|
GetConsoleMode(hOut, &dwMode);
|
||||||
dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
|
dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
|
||||||
SetConsoleMode(hOut, dwMode);
|
SetConsoleMode(hOut, dwMode);
|
||||||
SetConsoleOutputCP(65001);
|
SetConsoleOutputCP(65001);
|
||||||
|
|
||||||
|
/* Add directory containing janet.exe as DLL search path for
|
||||||
|
dynamic modules on windows. This is needed because dynamic modules reference
|
||||||
|
janet.exe for symbols. Otherwise, janet.exe would have to be in the current directory
|
||||||
|
to load natives correctly. */
|
||||||
|
#ifndef JANET_NO_DYNAMIC_MODULES
|
||||||
|
{
|
||||||
|
SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_USER_DIRS);
|
||||||
|
HMODULE hModule = GetModuleHandleW(NULL);
|
||||||
|
wchar_t path[MAX_PATH];
|
||||||
|
GetModuleFileNameW(hModule, path, MAX_PATH);
|
||||||
|
size_t i = wcsnlen(path, MAX_PATH);
|
||||||
|
while (i > 0 && path[i] != '\\')
|
||||||
|
path[i--] = '\0';
|
||||||
|
if (i) AddDllDirectory(path);
|
||||||
|
GetCurrentDirectoryW(MAX_PATH, path);
|
||||||
|
AddDllDirectory(path);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Set up VM */
|
/* Set up VM */
|
||||||
@ -67,7 +87,7 @@ int main(int argc, char **argv) {
|
|||||||
|
|
||||||
/* Save current executable path to (dyn :executable) */
|
/* Save current executable path to (dyn :executable) */
|
||||||
janet_table_put(env, janet_ckeywordv("executable"), janet_cstringv(argv[0]));
|
janet_table_put(env, janet_ckeywordv("executable"), janet_cstringv(argv[0]));
|
||||||
|
|
||||||
/* Run startup script */
|
/* Run startup script */
|
||||||
status = janet_dobytes(env, janet_gen_init, janet_gen_init_size, "init.janet", NULL);
|
status = janet_dobytes(env, janet_gen_init, janet_gen_init_size, "init.janet", NULL);
|
||||||
|
|
||||||
|
190
tools/FileAssociation.nsh
Normal file
190
tools/FileAssociation.nsh
Normal file
@ -0,0 +1,190 @@
|
|||||||
|
/*
|
||||||
|
_____________________________________________________________________________
|
||||||
|
|
||||||
|
File Association
|
||||||
|
_____________________________________________________________________________
|
||||||
|
|
||||||
|
Based on code taken from http://nsis.sourceforge.net/File_Association
|
||||||
|
|
||||||
|
Usage in script:
|
||||||
|
1. !include "FileAssociation.nsh"
|
||||||
|
2. [Section|Function]
|
||||||
|
${FileAssociationFunction} "Param1" "Param2" "..." $var
|
||||||
|
[SectionEnd|FunctionEnd]
|
||||||
|
|
||||||
|
FileAssociationFunction=[RegisterExtension|UnRegisterExtension]
|
||||||
|
|
||||||
|
_____________________________________________________________________________
|
||||||
|
|
||||||
|
${RegisterExtension} "[executable]" "[extension]" "[description]"
|
||||||
|
|
||||||
|
"[executable]" ; executable which opens the file format
|
||||||
|
;
|
||||||
|
"[extension]" ; extension, which represents the file format to open
|
||||||
|
;
|
||||||
|
"[description]" ; description for the extension. This will be display in Windows Explorer.
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
${UnRegisterExtension} "[extension]" "[description]"
|
||||||
|
|
||||||
|
"[extension]" ; extension, which represents the file format to open
|
||||||
|
;
|
||||||
|
"[description]" ; description for the extension. This will be display in Windows Explorer.
|
||||||
|
;
|
||||||
|
|
||||||
|
_____________________________________________________________________________
|
||||||
|
|
||||||
|
Macros
|
||||||
|
_____________________________________________________________________________
|
||||||
|
|
||||||
|
Change log window verbosity (default: 3=no script)
|
||||||
|
|
||||||
|
Example:
|
||||||
|
!include "FileAssociation.nsh"
|
||||||
|
!insertmacro RegisterExtension
|
||||||
|
${FileAssociation_VERBOSE} 4 # all verbosity
|
||||||
|
!insertmacro UnRegisterExtension
|
||||||
|
${FileAssociation_VERBOSE} 3 # no script
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
!ifndef FileAssociation_INCLUDED
|
||||||
|
!define FileAssociation_INCLUDED
|
||||||
|
|
||||||
|
!include Util.nsh
|
||||||
|
|
||||||
|
!verbose push
|
||||||
|
!verbose 3
|
||||||
|
!ifndef _FileAssociation_VERBOSE
|
||||||
|
!define _FileAssociation_VERBOSE 3
|
||||||
|
!endif
|
||||||
|
!verbose ${_FileAssociation_VERBOSE}
|
||||||
|
!define FileAssociation_VERBOSE `!insertmacro FileAssociation_VERBOSE`
|
||||||
|
!verbose pop
|
||||||
|
|
||||||
|
!macro FileAssociation_VERBOSE _VERBOSE
|
||||||
|
!verbose push
|
||||||
|
!verbose 3
|
||||||
|
!undef _FileAssociation_VERBOSE
|
||||||
|
!define _FileAssociation_VERBOSE ${_VERBOSE}
|
||||||
|
!verbose pop
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
!macro RegisterExtensionCall _EXECUTABLE _EXTENSION _DESCRIPTION
|
||||||
|
!verbose push
|
||||||
|
!verbose ${_FileAssociation_VERBOSE}
|
||||||
|
Push `${_DESCRIPTION}`
|
||||||
|
Push `${_EXTENSION}`
|
||||||
|
Push `${_EXECUTABLE}`
|
||||||
|
${CallArtificialFunction} RegisterExtension_
|
||||||
|
!verbose pop
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro UnRegisterExtensionCall _EXTENSION _DESCRIPTION
|
||||||
|
!verbose push
|
||||||
|
!verbose ${_FileAssociation_VERBOSE}
|
||||||
|
Push `${_EXTENSION}`
|
||||||
|
Push `${_DESCRIPTION}`
|
||||||
|
${CallArtificialFunction} UnRegisterExtension_
|
||||||
|
!verbose pop
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
!define RegisterExtension `!insertmacro RegisterExtensionCall`
|
||||||
|
!define un.RegisterExtension `!insertmacro RegisterExtensionCall`
|
||||||
|
|
||||||
|
!macro RegisterExtension
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro un.RegisterExtension
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro RegisterExtension_
|
||||||
|
!verbose push
|
||||||
|
!verbose ${_FileAssociation_VERBOSE}
|
||||||
|
|
||||||
|
Exch $R2 ;exe
|
||||||
|
Exch
|
||||||
|
Exch $R1 ;ext
|
||||||
|
Exch
|
||||||
|
Exch 2
|
||||||
|
Exch $R0 ;desc
|
||||||
|
Exch 2
|
||||||
|
Push $0
|
||||||
|
Push $1
|
||||||
|
|
||||||
|
ReadRegStr $1 HKCR $R1 "" ; read current file association
|
||||||
|
StrCmp "$1" "" NoBackup ; is it empty
|
||||||
|
StrCmp "$1" "$R0" NoBackup ; is it our own
|
||||||
|
WriteRegStr HKCR $R1 "backup_val" "$1" ; backup current value
|
||||||
|
NoBackup:
|
||||||
|
WriteRegStr HKCR $R1 "" "$R0" ; set our file association
|
||||||
|
|
||||||
|
ReadRegStr $0 HKCR $R0 ""
|
||||||
|
StrCmp $0 "" 0 Skip
|
||||||
|
WriteRegStr HKCR "$R0" "" "$R0"
|
||||||
|
WriteRegStr HKCR "$R0\shell" "" "open"
|
||||||
|
WriteRegStr HKCR "$R0\DefaultIcon" "" "$R2,0"
|
||||||
|
Skip:
|
||||||
|
WriteRegStr HKCR "$R0\shell\open\command" "" '"$R2" "%1"'
|
||||||
|
WriteRegStr HKCR "$R0\shell\edit" "" "Edit $R0"
|
||||||
|
WriteRegStr HKCR "$R0\shell\edit\command" "" '"$R2" "%1"'
|
||||||
|
|
||||||
|
Pop $1
|
||||||
|
Pop $0
|
||||||
|
Pop $R2
|
||||||
|
Pop $R1
|
||||||
|
Pop $R0
|
||||||
|
|
||||||
|
!verbose pop
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
!define UnRegisterExtension `!insertmacro UnRegisterExtensionCall`
|
||||||
|
!define un.UnRegisterExtension `!insertmacro UnRegisterExtensionCall`
|
||||||
|
|
||||||
|
!macro UnRegisterExtension
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro un.UnRegisterExtension
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!macro UnRegisterExtension_
|
||||||
|
!verbose push
|
||||||
|
!verbose ${_FileAssociation_VERBOSE}
|
||||||
|
|
||||||
|
Exch $R1 ;desc
|
||||||
|
Exch
|
||||||
|
Exch $R0 ;ext
|
||||||
|
Exch
|
||||||
|
Push $0
|
||||||
|
Push $1
|
||||||
|
|
||||||
|
ReadRegStr $1 HKCR $R0 ""
|
||||||
|
StrCmp $1 $R1 0 NoOwn ; only do this if we own it
|
||||||
|
ReadRegStr $1 HKCR $R0 "backup_val"
|
||||||
|
StrCmp $1 "" 0 Restore ; if backup="" then delete the whole key
|
||||||
|
DeleteRegKey HKCR $R0
|
||||||
|
Goto NoOwn
|
||||||
|
|
||||||
|
Restore:
|
||||||
|
WriteRegStr HKCR $R0 "" $1
|
||||||
|
DeleteRegValue HKCR $R0 "backup_val"
|
||||||
|
DeleteRegKey HKCR $R1 ;Delete key with association name settings
|
||||||
|
|
||||||
|
NoOwn:
|
||||||
|
|
||||||
|
Pop $1
|
||||||
|
Pop $0
|
||||||
|
Pop $R1
|
||||||
|
Pop $R0
|
||||||
|
|
||||||
|
!verbose pop
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
!endif # !FileAssociation_INCLUDED
|
Loading…
Reference in New Issue
Block a user