2014-02-27 19 views
0

我有一个Windows窗体在C#.net应用程序。在我的应用程序中,我必须调用一些R命令。在运行R命令之前,我必须检查R是否安装在用户的计算机上。我也必须知道R.exe的正确路径。在与R的最新版本最为Windows计算机上,路径为:"C:\Program Files\R\R-3.0.1\bin\i386\Rgui.exe"然而,正如你知道有R.许多版本的一些用户具有R 2.15.1,其他用户具有R 3.0.1等。自动检测的路径运行R.exe在C#在Windows

有没有一种简单的方法来从c#.NET中“猜测”到用户计算机上最新版R的路径?

我的想法是,我的应用程序会尝试自动检测到R的路径,并且只有在没有找到R的情况下,它会要求用户手动将路径设置为R.

回答

1

首先列表中的所有目录 “C:\ Program Files文件\ R”,那么你就可以检查任何版本的文件 “\ BIN \ I386 \ Rgui.exe” 存在,如果它存在,你可以选择您的版本并做任何你想要做的事情。可以使用System.IO.DirectorySystem.IO.File

+0

一个很好和直接的解决方案。如果用户将R安装在“C:\ Program Files \ R”以外的地方,则不起作用,但根据我的经验,95%的用户将R安装在默认的C:\ Program Files \ R文件夹中。 – jirikadlec2

+0

否则,你可以搜索安装R上的路径,但我不知道如何实现这个,所以我没加,但你有理由 – ReeCube

+1

如果你真的想列出文件找到R,最好使用环境变量'% ProgramFiles%'和'%ProgramFiles(x86)%'。 – otsaw

1

您可以从注册表中找到所有R应用程序的安装路径,然后遍历所有安装并找到最新版本。

HKLM /软件/微软/ CURRENTVERSION /卸载

另外,您也可以使用安装程序API来获取所有版本R的你必须具备r安装的产品代码的安装路径(这一般公众也可以从MSI /注册表得到它)

搜索MsiGetProductInfo

参考:http://msdn.microsoft.com/en-us/library/aa369558(VS.85).aspx

+1

在注册表中,而'InstallPath'在'HKLM \ SOFTWARE \ R型铁芯\ R'会给你正确的路径。另请注意'Wow6432Node','R32'和'R64'。 – otsaw

+0

我从来没有在Windows注册表中使用C#。 .NET框架中是否有内置方法来查找注册表中的内容并检查“HKLM \ Software \ R-core \ R”? – jirikadlec2

+0

是的。 .net几乎拥有访问系统所需的一切。 看http://msdn.microsoft.com/en-us/library/microsoft.win32。注册表(v = vs.110).aspx注册表API –