5

我在通过“进程”mvc4调用 .exe 文件中有一个 API。 此 .exe 使用log4net,并运行另一个将文件导出到目录和子目录的 .exe。在进程结束时,.exe 发布到 http API。

Process p = new Process();
p.StartInfo.FileName = ConfigurationManager.AppSettings["ExtractToolPath"];
p.StartInfo.Arguments = this.strcommand;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.Verb = "runas";
p.StartInfo.RedirectStandardInput = true;
p.Start();
string s = p.StandardOutput.ReadToEnd();
p.WaitForExit();

字符串's'以“”(空白字符串)返回。

s参数获取打印到控制台窗口的内容。我在 .exe 的开头做了一个打印,因此我知道它甚至没有启动这个过程。

重要提示:当我删除 log4net 记录器时,'s'参数会得到一些输出,但是当尝试执行任何需要写权限的命令时它会失败。

我试图授予 IIS 可执行权限,并使用管理员用户名和密码进行模拟。我把我的目录“分享”给每个人。没有任何帮助。

4

2 回答 2

9

您是否尝试将应用程序池标识设置为管理员?或者将目录的写权限授予应用程序池身份?

用于写入的凭证是应用程序池身份中的凭证。

于 2013-01-15T08:08:04.350 回答
0

当部署在 IIS 上的 ASP.NET Core 应用程序必须从(显然是在 Web 应用程序文件夹之外)启动一个进程(带有一些参数)时,我有类似的上下文,该进程Program Files在用户配置文件中的某个目录中输出数据(也是在 Web 应用程序文件夹之外) )。

从命令提示符运行时,该命令需要提升(用户帐户控制)。

为了使它从 IIS 运行:

  • IIS AppPool\YourPool必须能够写入输出目录
  • 在 Web 应用程序目录中创建了一个 bat 文件,其中包含要发出的命令
  • IIS AppPool\YourPool未包含管理员用户组中

这是在 Windows 7 x64 上测试的。

于 2018-05-25T13:33:02.737 回答