Ticket #1149 (closed enhancement: fixed)
WinGrass - load R-installation-path dynamically into PATH
| Reported by: | hellik | Owned by: | grass-dev@… |
|---|---|---|---|
| Priority: | normal | Milestone: | 7.0.0 |
| Component: | Startup | Version: | svn-trunk |
| Keywords: | wingrass, path, R | Cc: | |
| Platform: | MSWindows Vista | CPU: | x86-32 |
Description
Hi,
at the moment the WinGrass-Installer reads the Windows-registry during installation for the R-installation-path
http://trac.osgeo.org/grass/browser/grass/trunk/mswindows/GRASS-Installer.nsi#L219
ReadRegStr $R_HKLM_INSTALL_PATH HKLM "Software\R-core\R" "InstallPath" ReadRegStr $R_HKCU_INSTALL_PATH HKCU "Software\R-core\R" "InstallPath"
and writes this, if found, to the grassXX.bat
http://trac.osgeo.org/grass/browser/grass/trunk/mswindows/GRASS-Installer.nsi#L728
${If} $R_HKLM_INSTALL_PATH != ""
FileWrite $0 'set PATH=$R_HKLM_INSTALL_PATH\bin;%PATH%$\r$\n'
${EndIf}
${If} $R_HKCU_INSTALL_PATH != ""
FileWrite $0 'set PATH=$R_HKCU_INSTALL_PATH\bin;%PATH%$\r$\n'
${EndIf}
this is a very statically approach to get the R-installation-path into the %PATH% and R working in the Grass-delivered command-line. that means, if R is upadated/upgraded, the Grass-delivered command-line can't find R in the %PATH% anymore.
a dynamically approach to add the R-installation-path to %PATH% would be better.
from the R-Windows-FAQ: http://cran.r-project.org/bin/windows/base/rw-FAQ.html#Does-R-use-the-Registry_003f
2.17 Does R use the Registry?
Not when R itself is running.
When you run the R installer, there are options (under `Select Additional Tasks') to `Save version number in registry' and (for Administrator installs) `Associate R with .RData files'.
If you tick the first option, the following string entries are added to the Windows registry:
* HKEY_LOCAL_MACHINE\Software\R-core\R\Current Version contains the version number, currently 2.11.1.
* HKEY_LOCAL_MACHINE\Software\R-core\R\[version]\InstallPath (where [version] is currently 2.11.1) contains the path to the R home directory.
If you do not have administrative privileges on the machine while running the installer, then the entries are created under HKEY_CURRENT_USER. As from R 2.11.0 the same entries are also created under Software\R-core\R32 or Software\R-core\R64, for 32- and 64-bit R respectively.
If you tick the second option (shown with administrative privileges only) (`Associate R with .RData files') then entries are created under HKEY_CLASSES_ROOT\.RData and HKEY_CLASSES_ROOT\RWorkspace.
After installation you can add the Registry entries in by running RSetReg.exe in the bin folder, and remove them by running this with argument /U. Note that this requires administrative privileges unless run with argument /Personal and neither sets up nor removes the file associations.
the following code lines in the windows-command-line outputs the R installation path:
reg query "HKLM\Software\R-core\R" /v "InstallPath"
or
reg query "HKCU\Software\R-core\R" /v "InstallPath"
in the following way:
C:\data\private\compiling_gis\detect_R_in_Dos>reg query "HKLM\Software\R-core\R" /v "InstallPath"
HKEY_LOCAL_MACHINE\Software\R-core\R
InstallPath REG_SZ C:\Program Files\R\R-2.11.1
following line of code extract from the above output the R-installation path and set a variable which could be added to %PATH%
set RegCommand=reg query "HKLM\Software\R-core\R" /v "InstallPath" FOR /f "tokens=1-2* delims= " %%a IN ( ' %RegCommand% ^| find "InstallPath" ' ) do set R_HKLM_INSTALL_PATH=%%c
or
set RegCommand2=reg query "HKCU\Software\R-core\R" /v "InstallPath" FOR /f "tokens=1-2* delims= " %%a IN ( ' %RegCommand2% ^| find "InstallPath" ' ) do set R_HKCU_INSTALL_PATH=%%c
but if there is no value in registry, following error comes up:
C:\data\private\compiling_gis\detect_R_in_Dos>FOR /F "tokens=1-2* delims= " %a IN (' reg query "HKCU\Software\R-core\R" /v "InstallPath" | find "InstallPath" '
) do set R_HKCU_INSTALL_PATH=%c
ERROR: registry key or value couldn't be found.
following questions:
- which of in the R-Windows-FAQ mentioned registry entries should be tested?
- how could the above mentioned lines of code be added to grassXX.bad? (I'm not really familiar with this kind of coding)
this would be nice in order to have a R-session working in the Grass-delivered command line, independently if the R-installation has changed.
best regards Helmut

