Finding the Search Path via Windows Registry
If R is installed with the option of ‘Save version number in registry', you may find the directory in which the R DLLs locate.Snippet
Microsoft.Win32.RegistryKey rCore = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\R-core"); if (rCore == null) { thrownew System.ApplicationException("Registry key is not found."); } bool is64Bit = System.Environment.Is64BitProcess; Microsoft.Win32.RegistryKey r = rCore.OpenSubKey(is64Bit ? "R64" : "R"); if (r == null) { thrownew System.ApplicationException("Registry key is not found."); } System.Version currentVersion = new System.Version((string)r.GetValue("Current Version")); string installPath = (string)r.GetValue("InstallPath"); string bin = System.IO.Path.Combine(installPath, "bin"); // Up to 2.11.x, DLLs are installed in R_HOME\bin.// From 2.12.0, DLLs are installed in the one level deeper directory.return currentVersion < new System.Version(2, 12) ? bin : System.IO.Path.Combine(bin, is64Bit ? "x64" : "i386");
match Microsoft.Win32.Registry.LocalMachine.OpenSubKey (@"SOFTWARE\R-core") with | null-> System.ApplicationException("Registry key is not found.") |> raise | rCore ->let is64bit = System.Environment.Is64BitProcess match rCore.OpenSubKey (if is64bit then"R64"else"R") with | null-> System.ApplicationException("Registry key is not found.") |> raise | r ->let getString key = r.GetValue (key) :?> string let (%%) dir name = System.IO.Path.Combine (dir, name) let currentVersion = System.Version (getString "Current Version") let binPath = getString "InstallPath" %% "bin"if currentVersion < System.Version (2, 12) then binPath else binPath %% if is64bit then"x64"else"i386"
Reference: