我需要使用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;
答案 0 :(得分:3)
您是否考虑过不使用流程? SAS很有可能拥有一项称为集成技术的技术。它使用COM接口进行接口。然后,您可以以这种方式执行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的论文。尽快下载论文和代码(下周?)