我有一个可执行文件(没有源文件,只有.exe文件),我试图在.sas文件中运行,使用对未命名管道的文件引用:
%macro process_file(path);
%let filepath = %trim(&path.);
%let filename = %scan(&path., -1, %str(\));
filename flf pipe "&progpath. ""&filepath."" ""&workpath.\&filename..log""";
data hnd_tmp;
length line $1024.;
infile flf; input;
line = left(trim(compbl(_infile_)));
run;
%mend process_file;
此脚本基本上返回阻止特定文件(文件路径)的进程列表,并将输出返回到日志文件(第三个参数)。
当我在SAS 9.3中运行我的代码时,它运行良好,我收到了所需的输出,但是当我使用SAS Enterprise Guide 5.1时,该脚本会抛出异常:
Unhandled Exception: System.Exception: Could not list processes locking resource. Failed to get size of result.
at ProcessHelpers.FileUtil.WhoIsLocking(String path)
at ConsoleApplication1.Program.start(String[] args)
at ConsoleApplication1.Program.Main(String[] args
我无法调试应用程序,因此这个异常几乎没有告诉我任何内容。
我想知道在SAS BASE和SAS Enterprise Guide中运行程序之间是否存在任何差异。环境变量,系统选项等 - 可能导致程序抛出异常的东西。
我一直在寻找SAS文档和论文的解决方案,但到目前为止还没有运气。
你有什么想法吗?提前谢谢。
已修改以提供更多详情,请参阅评论。
该解决方案已在网络服务器上直接测试,该程序引发异常。我可以在本地和本地服务器上的RACE虚拟机上复制这种情况。所有服务器都在Windows上运行。硬编码命令没有帮助,仍然存在问题。 XCMD已开启。在本地调用代码似乎是一个问题。
答案 0 :(得分:0)
如果代码在Base SAS中成功(在目标计算机上),并且在连接到同一服务器上运行的EG会话中失败,那么我怀疑用户权限存在问题。
可以使用shell命令启动与EG(远程客户端)会话配置相同的交互式Base SAS会话 - 例如:
"C:\SAS\Config\Lev1\SASApp\WorkspaceServer\WorkspaceServer.bat" -terminal -splash
尝试以与EG(sasdemo?)连接的用户身份登录RACE映像,并在从上面的命令启动的BASE SAS会话中运行代码。
总结一下,是的,存在差异,主要在.cfg
文件中,但也可能在创建最终SAS启动命令时使用的各种_usermods
文件中找到。只需按照上面的.bat文件的内容即可查看它们。