从SAS BASE和Enterprise Guide运行可执行文件 - 有什么区别吗?

时间:2016-09-09 12:29:37

标签: sas executable sas-macro enterprise-guide

我有一个可执行文件(没有源文件,只有.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已开启。在本地调用代码似乎是一个问题。

1 个答案:

答案 0 :(得分:0)

如果代码在Base SAS中成功(在目标计算机上),并且在连接到同一服务器上运行的EG会话中失败,那么我怀疑用户权限存在问题。

可以使用shell命令启动与EG(远程客户端)会话配置相同的交互式Base SAS会话 - 例如:

"C:\SAS\Config\Lev1\SASApp\WorkspaceServer\WorkspaceServer.bat" -terminal -splash

尝试以与EG(sasdemo?)连接的用户身份登录RACE映像,并在从上面的命令启动的BASE SAS会话中运行代码。

  • 如果这不成功(错误消息),则问题是服务器端,很可能是用户名权限。
  • 如果您的文件名管道在上面工作,那么我确保您确实在EG会话中连接到同一个工作区服务器(检查您的连接配置文件)。

总结一下,是的,存在差异,主要在.cfg文件中,但也可能在创建最终SAS启动命令时使用的各种_usermods文件中找到。只需按照上面的.bat文件的内容即可查看它们。