我需要使用 asp.net 和 c# 通过 Web 应用程序运行 SAS 脚本。
我已使用 ProcessStartInfo 执行 SAS 脚本。这在本地与解决方案一起工作正常。一旦我在 IIS 中托管应用程序,它就无法工作并返回退出代码 111。请帮助我解决这个问题。
ProcessStartInfo info = new ProcessStartInfo("path of SAS EXE","file path");
int exitCode = 0;
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
Process p = Process.Start(info);
p.WaitForExit();
exitCode = p.ExitCode;
最佳答案
您是否考虑过不使用流程? SAS 有一种称为集成技术的技术,您很可能拥有它。它使用 COM 接口(interface)进行连接。然后,您可以以这种方式执行 SAS 并传递所需的内容,而不是使用命令行调用。
示例代码如下:
SAS.Workspace ws = new Workspace();
LanguageService ls = ws.LanguageService;
StoredProcessService sp = ls.StoredProcessService;
sp.Repository = @"file:" + @"x:\temp";
sp.Execute("test.sas", string.Empty);
string log = ls.FlushLog(1000);
如果您需要通过进程启动来完成,这里是代码:
此外,如果您将命令传递给 SAS,我也看不到任何命令。您必须从命令行(至少程序名称)将命令传递给 SAS。 info.Arguments 是一个开始。此外,将 std 输出重定向到一个文件。查看 info.RedirectStandardOutput 和 info.RedirectStandardError。但是,我不认为这是问题所在。我认为您遇到了安全问题。查看事件查看器,看看它是否弹出。 IISS 需要安全才能在目录中执行。
最后,您为什么要使用 IIS?除非您有遗留要求,否则不应使用 IIS。切换到 Kestrel 和 ASP.NET Core。我将在 SGF 上发表一篇关于以这种方式使用 SAS 的论文。尽快下载论文和代码(下周?)
关于c# - 无法通过 C# 运行 SAS 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55647324/