【问题标题】:Running an executable file from SAS BASE and Enterprise Guide - any differences?从 SAS BASE 和 Enterprise Guide 运行可执行文件 - 有什么区别吗?
【发布时间】:2016-09-09 12:29:36
【问题描述】:

我有一个可执行文件(没有源文件,只有 .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 文档和论文中寻找解决方案,但到目前为止没有运气。

你有什么想法吗?提前致谢。

已编辑以提供更多详细信息,请参阅 cmets。

该解决方案已在联网服务器上直接测试,程序抛出异常。我可以在本地的 RACE 虚拟机上复制这种情况,也可以在服务器上本地复制这种情况。所有服务器都在 Windows 上运行。硬编码命令没有帮助,仍然存在问题。 XCMD 已打开。不是在本地调用代码似乎有问题。

【问题讨论】:

  • 系统变量、路径等可能通过 EG 有所不同。你可以执行 X 命令来回显这些值,看看是否与直接登录时有所不同?
  • @DomPazz:我不完全确定“X 命令”是什么意思,我运行了一个代码,确实从 BASE 和 EG 获取所有宏变量,我正在尝试检查它们并发现差异。可用here @ pastebin
  • X <command>; 运行来自 SAS 的操作系统命令。它的工作方式类似于您正在使用的 PIPE 文件名。您可以运行一些操作系统回显以查看环境之间的不同之处。如果这是问题所在,那么您可以让您的管理员帮助您解决它。
  • 当您在 EG 中运行它时,您是在连接到“本地 SAS 服务器”还是在连接到(联网的)SAS 服务器?
  • 另外,尝试将宏代码排除在等式之外。对宏生成的命令进行硬编码,并检查它是否在两者上运行。换句话说,想出最简单的命令让它失败,这样你就可以排除其他一切。

标签: sas executable sas-macro enterprise-guide


【解决方案1】:

如果代码在 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文件的内容查看即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多