-
-
Save florentbr/6be960752fc852ee99eece6b4acb8ba7 to your computer and use it in GitHub Desktop.
:: | |
:: This script installs SeleniumBasic without administrator privileges. | |
:: It registers a COM API running on the .NET Framework. | |
:: | |
:: The required files can be extracted with innoextract from the original setup : | |
:: Selenium.dll Selenium32.tlb Selenium64.tlb Selenium.pdb | |
:: | |
:: The drivers are not provided. You'll have to download and place the desired driver : | |
:: * in a folder defined in the "PATH" environment variable | |
:: * or in this folder before running this script | |
:: * or in the installed folder after installation | |
:: Note that the group policy may block the drivers depending on the location or whitelist. | |
:: | |
:: By default, the files are installed in "%APPDATA%\SeleniumBasic". | |
:: To change the install folder, edit "set _LOCATION=..." in this script. | |
:: | |
:: By default, the library will associate with the latest installed .NET runtime. | |
:: To run a specific runtime version, edit "set _RUNTIME=v?.?.*" in this script. | |
:: It will fail in Office if a different runtime version is already loaded by an extension. | |
:: If it's the case, try a different version (ex: v1.0.3705 v2.0.50727 v4.0.30319). | |
:: | |
:: To uninstall, open "Programs and features" and double-click on "SeleniumBasic" | |
:: or execute "%APPDATA%\SeleniumBasic\uninstall.cmd" | |
:: | |
@echo off | |
setlocal EnableDelayedExpansion | |
set PATH=%SYSTEMROOT%\System32;%SYSTEMROOT%\System32\wbem | |
chcp 65001 >nul 2>nul | |
pushd "%~dp0" || goto :failed | |
set _NAME=SeleniumBasic | |
set _HOMEPAGE=https://github.com/florentbr/SeleniumBasic | |
set _LOCATION=%APPDATA%\SeleniumBasic | |
set _FILES=Selenium.dll Selenium32.tlb Selenium64.tlb Selenium.pdb | |
set _RUNTIME=v?.?.* | |
for %%f in (%_FILES%) do if not exist "%%~f" >&2 echo Error: file %%f not found & goto :failed | |
call :get_version _VERSION %_FILES% || goto :failed | |
call :get_runtime _RUNTIME || goto :failed | |
echo ============================================================================= | |
echo %_NAME% %_VERSION% | |
echo Microsoft .NET Framework %_RUNTIME% | |
echo %_HOMEPAGE% | |
echo ============================================================================= | |
if exist "%_LOCATION%\uninstall.cmd" ( | |
echo Uninstall previous version ... | |
cmd /c "%_LOCATION%\uninstall.cmd" >nul | |
timeout /t 1 >nul | |
) | |
echo Install to %_LOCATION% ... | |
xcopy Selenium* "%_LOCATION%\" /y >nul || goto :failed | |
xcopy *driver.exe "%_LOCATION%\" /y >nul 2>nul || goto :failed | |
call :build_setup >"%_LOCATION%\setup.inf" || goto :failed | |
> "%_LOCATION%\uninstall.cmd" ( | |
echo @set PATH=%%SYSTEMROOT%%\System32 | |
echo @%%SYSTEMROOT%%\SysWOW64\rundll32 advpack.dll,LaunchINFSection "%%~dp0setup.inf",DefaultUninstall,3 | |
echo @%%SYSTEMROOT%%\System32\rundll32 advpack.dll,LaunchINFSection "%%~dp0setup.inf",DefaultUninstall,3 | |
echo @start "" /b cmd /c rmdir /s /q "%%~dp0" | |
) | |
echo Register application ... | |
%SYSTEMROOT%\SysWOW64\rundll32 advpack.dll,LaunchINFSection "%_LOCATION%\setup.inf",DefaultInstall,3 2>nul | |
%SYSTEMROOT%\System32\rundll32 advpack.dll,LaunchINFSection "%_LOCATION%\setup.inf",DefaultInstall,2 || goto :failed | |
echo Test CreateObject with VBS script ... | |
> "%_LOCATION%\test.vbs" echo CreateObject "Selenium.ChromeDriver" | |
(cscript //nologo "%_LOCATION%\test.vbs" >nul) 2>&1 | findstr /r "." && goto :failed | |
echo Done ^^! | |
popd & endlocal & pause >nul & exit \b 0 | |
:failed | |
>&2 echo Failed ^^! | |
popd & endlocal & pause >nul & exit \b 1 | |
:get_runtime | |
for /d %%f in ("%SYSTEMROOT%\Microsoft.NET\Framework\!%1!") do if exist "%%f\mscorlib.dll" set "%1=%%~nxf" | |
if exist "%SYSTEMROOT%\Microsoft.NET\Framework\!%1!\mscorlib.dll" exit /b 0 | |
>&2 echo Error: .NET Framework !%1! not found. | |
exit /b 1 | |
:get_version | |
set _file=%~f2 | |
set _query=wmic datafile where "Name='%_file:\=\\%'" get Version | |
for /f "usebackq skip=1" %%a in (`%_query% 2^>nul`) do for %%l in (%%a) do set "%1=%%l" & exit /b 0 | |
>&2 echo Error: failed to read version of %_file% | |
exit /b 1 | |
:build_setup | |
pushd "%_LOCATION%" || exit /b 0 | |
call :build_reg 4>1 5>2 6>3 >nul | |
cmd /d /u /c for %%f in (1 2 3) do @type %%f ^& del %%f | |
popd >nul | |
goto :eof | |
:build_reg | |
set _libname=Selenium Type Library | |
set _libguid={0277FC34-FD1B-4616-BB19-A9AABCAF2A70} | |
set _libsign=Selenium, Version=!_VERSION!, Culture=neutral | |
set _libvers=2.0 | |
>&4 echo [Version] | |
>&4 echo Signature="$Windows NT$" | |
>&4 echo AdvancedINF=2.5 | |
>&4 echo. | |
>&4 echo [DefaultInstall] | |
>&4 echo DelReg = DelReg | |
>&4 echo AddReg = AddReg | |
>&4 echo. | |
>&4 echo [DefaultUninstall] | |
>&4 echo DelReg = DelReg | |
>&5 echo. | |
>&5 echo [AddReg] | |
>&5 echo HKCU,SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\SeleniumBasic,DisplayName,,"!_NAME!" | |
>&5 echo HKCU,SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\SeleniumBasic,DisplayVersion,,"!_VERSION!" | |
>&5 echo HKCU,SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\SeleniumBasic,InstallLocation,,"!CD!" | |
>&5 echo HKCU,SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\SeleniumBasic,UninstallString,,"""!CD!\uninstall.cmd""" | |
>&5 echo HKCU,SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\SeleniumBasic,URLInfoAbout,,"!_HOMEPAGE!" | |
>&5 echo HKCU,SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\SeleniumBasic,NoModify,0x00010001,1 | |
>&5 echo HKCU,SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\SeleniumBasic,NoRepair,0x00010001,1 | |
>&5 echo HKCU,SOFTWARE\Classes\TypeLib\!_libguid!\!_libvers!,,,"!_libname!" | |
>&5 echo HKCU,SOFTWARE\Classes\TypeLib\!_libguid!\!_libvers!\FLAGS,,,"0" | |
>&5 echo HKCU,SOFTWARE\Classes\TypeLib\!_libguid!\!_libvers!\0\win32,,,"!CD!\Selenium32.tlb" | |
>&5 echo HKCU,SOFTWARE\Classes\TypeLib\!_libguid!\!_libvers!\0\win64,,,"!CD!\Selenium64.tlb" | |
>&6 echo. | |
>&6 echo [DelReg] | |
>&6 echo HKCU,SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\SeleniumBasic | |
>&6 echo HKCU,SOFTWARE\Classes\TypeLib\!_libguid! | |
for %%l in ( | |
0809389E78C4:PhantomJSDriver | |
14DB1E4916D4:FirefoxDriver | |
3C406728F1A2:EdgeDriver | |
44A424DB3F50:Timeouts | |
5D556733E8C9:ChromeDriver | |
5DB46A739EEA:List | |
6AAF7EDD33D6:Assert | |
7D30CBC3F6BB:Waiter | |
80B2B91F0D44:By | |
9E7F9EF1D002:OperaDriver | |
A34FCBA29598:Utils | |
B0C8C528C673:Verify | |
B719752452AA:Table | |
BE75D14E7B41:Keys | |
CDCD9EB97FD6:PdfFile | |
CEA7D8FD6954:Dictionary | |
E3CCFFAB4234:WebDriver | |
E9AAFA695FFB:Application | |
EED04A1E4CD1:IEDriver | |
) do for /f "tokens=1,2 delims=:" %%i in ("%%l") do ( | |
set _name=Selenium.%%j | |
set _guid={0277FC34-FD1B-4616-BB19-%%i} | |
>&6 echo HKCU,SOFTWARE\Classes\!_name! | |
>&6 echo HKCU,SOFTWARE\Classes\CLSID\!_guid! | |
>&5 echo HKCU,SOFTWARE\Classes\!_name!,,,"!_name!" | |
>&5 echo HKCU,SOFTWARE\Classes\!_name!\CLSID,,,"!_guid!" | |
>&5 echo HKCU,SOFTWARE\Classes\CLSID\!_guid!,,,"!_name!" | |
>&5 echo HKCU,SOFTWARE\Classes\CLSID\!_guid!\InprocServer32,,,"!SYSTEMROOT!\System32\mscoree.dll" | |
>&5 echo HKCU,SOFTWARE\Classes\CLSID\!_guid!\InprocServer32,Class,,"!_name!" | |
>&5 echo HKCU,SOFTWARE\Classes\CLSID\!_guid!\InprocServer32,Assembly,,"!_libsign!" | |
>&5 echo HKCU,SOFTWARE\Classes\CLSID\!_guid!\InprocServer32,CodeBase,,"!CD!\Selenium.dll" | |
>&5 echo HKCU,SOFTWARE\Classes\CLSID\!_guid!\InprocServer32,RuntimeVersion,,"!_RUNTIME!" | |
>&5 echo HKCU,SOFTWARE\Classes\CLSID\!_guid!\InprocServer32,ThreadingModel,,"Both" | |
>&5 echo HKCU,SOFTWARE\Classes\CLSID\!_guid!\ProgId,,,"!_name!" | |
>&5 echo HKCU,SOFTWARE\Classes\CLSID\!_guid!\VersionIndependentProgID,,,"!_name!" | |
>&5 echo HKCU,SOFTWARE\Classes\CLSID\!_guid!\Implemented Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29},,,"" | |
) | |
for %%l in ( | |
01D514FE0B1A:20:_Utils | |
0B61E370369D:24:_TableRow | |
0EA52ACB97D1:20:_Assert | |
11660D7615B7:20:_Manage | |
1456C48D8E5C:24:_Dictionary | |
2276E80F5CF7:20:_Cookie | |
384C7E50EFA8:20:_Waiter | |
495CC9DBFB96:20:_Verify | |
4CE442A16502:20:_SelectElement | |
54BA7C175990:20:_Image | |
61DAD6C51012:20:_Keyboard | |
637431245D48:24:_Keys | |
63F894CA99E9:20:_Mouse | |
6E0522EA435E:20:_Application | |
74F5D5680428:20:_Timeouts | |
7C9763568492:20:_WebElements | |
7E2EBB6C82E9:20:_Size | |
8B145197B76C:20:_WebElement | |
A398E67A519B:24:_DictionaryItem | |
A3DE5685A27E:20:_By | |
ACE280CD7780:20:_Point | |
B51CB7C5A694:20:_Alert | |
B825A6BF9610:24:_Table | |
BBE48A6D09DB:20:_Actions | |
BE15C121F199:20:_TableElement | |
C539CB44B63F:24:_List | |
C6F450B6EE52:20:_Storage | |
CC6284398AA5:20:_WebDriver | |
D0E30A5D0697:20:_Proxy | |
D5DE929CF018:20:_TouchActions | |
E6E7ED329824:20:_Cookies | |
F2A56C3A68D4:20:_PdfFile | |
FBDA3A91C82B:20:_Window | |
FFD6FAEF290A:20:_TouchScreen | |
) do for /f "tokens=1,2,3 delims=:" %%i in ("%%l") do ( | |
set _name=%%k | |
set _guid={0277FC34-FD1B-4616-BB19-%%i} | |
set _stub={000204%%j-0000-0000-C000-000000000046} | |
>&6 echo HKCU,SOFTWARE\Classes\Interface\!_guid! | |
>&5 echo HKCU,SOFTWARE\Classes\Interface\!_guid!,,,"!_name!" | |
>&5 echo HKCU,SOFTWARE\Classes\Interface\!_guid!\ProxyStubClsid32,,,"!_stub!" | |
>&5 echo HKCU,SOFTWARE\Classes\Interface\!_guid!\TypeLib,,,"!_libguid!" | |
>&5 echo HKCU,SOFTWARE\Classes\Interface\!_guid!\TypeLib,Version,,"!_libvers!" | |
) | |
for %%l in ( | |
300DAA508541:Strategy | |
B342CE81CB2A:MouseButton | |
C724C5135B6E:CacheState | |
) do for /f "tokens=1,2 delims=:" %%i in ("%%l") do ( | |
set _name=Selenium.%%j | |
set _guid={0277FC34-FD1B-4616-BB19-%%i} | |
>&6 echo HKCU,SOFTWARE\Classes\Record\!_guid! | |
>&5 echo HKCU,SOFTWARE\Classes\Record\!_guid!,Class,,"!_name!" | |
>&5 echo HKCU,SOFTWARE\Classes\Record\!_guid!,Assembly,,"!_libsign!" | |
>&5 echo HKCU,SOFTWARE\Classes\Record\!_guid!,RuntimeVersion,,"!_RUNTIME!" | |
>&5 echo HKCU,SOFTWARE\Classes\Record\!_guid!,CodeBase,,"!CD!\Selenium.dll" | |
) | |
goto :eof |
@florentbr thanks to your clear guidance left in the build-setup.py file, I am now able to rebuild a working setup file with the custom injection to change the driver library directory. It works perfectly fine except for the following issues thrown by Python during the execution of "build-setup.py" which I have to comment those sections out to let it flow. Do you happen to know what these are?
execute(APP_MSBUILD_PATH, '/p:Configuration=Release', '/nologo', '.\Selenium\Selenium.shfbproj')
c:\Progra~2\EWSoftware\Sandcastle Help File Builder\SandcastleHelpFileBuilder.targets(44,3): error MSB4062: The "SandcastleBuilder.MSBuild.BuildHelp" task could not be loaded from the assembly c:\Program Files (x86)\EWSoftware\Sandcastle Help File Builder\net472\SandcastleBuilder.MSBuild.dll. Could not load file or assembly 'Microsoft.Build.Utilities.Core, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified. Confirm that the declaration is correct, that the assembly and all its dependencies are available, and that the task contains a public class that implements Microsoft.Build.Framework.ITask.
Things I have tried but could not fix the issue:
- Installing latest version of SandcastleHelpFileBuilder.
- Installing dotnet Framework 3.5.
execute(APP_PYTHON_PATH, dir + r'\rebuild_exel_files.py'))
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, 'Microsoft Excel', 'Programmatic access to Visual Basic Project is not trusted\n', 'xlmain11.chm', 0, -2146827284), None)
Things I have tried but could not fix the issue:
- Checking "Trust access to the VBA project object model" in Excel & Word.
I have an instance of SeleniumBasic installed on C:\programfiles\SeleniumBasic. I want to make the instance point to my C:\users\userid\appdata\seleniumbasic folder instead. How do I do that? Would it be possible to modify a registry setting or a path command to make this happen? Thanks for any help.
It's not possible with the current implementation, the service is looking for
chromedriver.exe
in the folder whereSelenium.dll
is located.