Sys.setenv(“SNC_LIB” = lib_path_64) fails
我正在使用软件包RSAP读取SAP数据。
RSAP加载SNC(安全网络连接)动态库,并使用环境变量SNC_LIB进行搜索。
根据本地用户系统的不同,它可能是32或64位的库。
我正在R脚本中设置环境变量。
但是RSAP仍然在旧的路径中进行搜索。
我尝试避免在应用程序外部设置环境变量,因为它是一个闪亮的应用程序,应被许多用户使用。
似乎仅在RSTUDIO会话中更改了环境变量,而没有在外部更改。
RStudio控制台中环境变量的初始情况:
1 2 3 4 | > Sys.getenv("SNC_LIB_64") [1]"C:\\\\Program Files\\\\SAP\\\\FrontEnd\\\\SecureLogin\\\\lib\\\\sapcrypto.dll" > Sys.getenv("SNC_LIB") [1]"C:\\\\Program Files (x86)\\\\SAP\\\\FrontEnd\\\\SecureLogin\\\\lib\\\\sapcrypto.dll" |
编码:
1 2 3 4 5 6 7 8 | # check SNC_LIB path from environment variables # 32 or 64 bit? # if 64 bit lib path is set, set the default lib path variable # SNC_LIB to it lib_path_64 <- Sys.getenv("SNC_LIB_64") if (lib_path_64 !="") { Sys.setenv("SNC_LIB" = lib_path_64) } |
在RStudio调试器中执行代码后:
1 2 | Browse[2]> Sys.getenv("SNC_LIB") [1]"C:\\\\Program Files\\\\SAP\\\\FrontEnd\\\\SecureLogin\\\\lib\\\\sapcrypto.dll" |
RSAP在加载库时引发的错误:
1 2 | [Thr 12160] Wed Jan 03 17:42:57 2018 [Thr 12160] *** ERROR => SncPDLInit()==SNCERR_INIT, Adapter #1 (C:\\Program Files (x86)\\SAP\\FrontEnd\\SecureLogin\\lib\\sapcrypto.dll) not loaded [sncxxdl.c 727] |
使用了旧路径。当我在运行RStudio之前更改外部路径时,它可以正常工作。
问题:
有没有一种方法可以以另一种方式设置库路径变量SNC_LIB,以确保它是全局的而不是在本地更改的,并且RSAP动态加载运行良好?
简单的复制方式是:
启动RStudio
致电Sys.setenv(" TEST_VAR " = " good ")
致电Sys.getenv(" TEST_VAR ")
查看正确的结果[1] "好"
关闭RStudio
再次启动RStudio
再次调用Sys.getenv(" TEST_VAR ")
请参见\\'错误\\'意外结果[1] "
R中设置的环境变量会影响该进程及其运行的进程,当R退出时它们不会持久存在。
目前尚不清楚您采取了什么步骤导致RSAP错误,但是您的"易于重现的代码"脚本是否按预期运行。
R会话中