繁体   English   中英

如何授予IIS AppPool桌面权限

[英]How to give IIS AppPool Desktop Rights

我需要帮助的操作是从Intranet网页在自己的服务器磁盘上执行EXE文件,而IIS在同一服务器上。 该网页使用业务层与给定参数一起执行ProcessStart。

当我从Web执行执行时,任务管理器向我显示该应用程序正在以用户的网页IIS AppPool启动。 几秒钟后,它被杀死了。 在数据库日志中,我可以看到;

The Microsoft Jet database engine cannot open the file '\\\\computer\\pathfile.ext'. It is already opened exclusively by another user, or you need permission to view its data.

没错 EXE工具依次从其他计算机加载文件。 这是一种特殊的行为,在从桌面使用该工具时,已对其进行了充分的研究和良好的工作。

我的目标/问题,
我希望此网络功能调用具有桌面权限。 有可能吗?

IIS AppPool使用帐户ApplicationPoolIdentity进行常规设置。 自从<= IIS6以来,我不知道IIS 7.5和Windows Server 2008 R2提出了多少安全模型,我似乎是“不明智的运气”。

我试图将应用程序池用户更改为NetworkService,管理员。
我试图将应用程序池设置为exec / read right
我什至试图让webapp运行带有对应用程序内部调用的批处理文件。

然后,我开始更改ProcessStart行为。 在这里,我不知道该怎么办。 我试图添加VERB符文。 在这里强制输入密码提示不是解决方案。 我试图模拟用户名/密码。 那里没有运气。 在一次在桌面命令窗口中使用/ savecred之后,我还尝试将runas / user:blabla作为参数添加到ProcessStart中。 那里没有运气。

也许这应该工作,但我只是不了解正确的属性设置。 我在下面添加了ProcessStart代码段,还添加了一些注释代码,让您了解我尝试了什么。

 public string RunProcess(ApplicationType type, int param)
    {
        currentSelection = GetApplicationType(type);

        ProcessStartInfo info = new ProcessStartInfo(currentSelection.Path);

        info.CreateNoWindow = false;
        info.UseShellExecute = true;
        //info.UseShellExecute = false;
        //info.ErrorDialog = false;
        //info.UserName = "dummyUsEr";
        //info.Password = this.SecurePwd("DummyPWd");

        info.WindowStyle = ProcessWindowStyle.Normal;
        info.Arguments = string.Format(" {0}", param.ToString());

        using (Process exec = Process.Start(info))
        {
            try
            {
                exec.WaitForExit();
            }
            catch 
            {  
            }
        }

        return output;
    }

编辑

为了清楚起见,也许可以帮助其他一些男孩/女孩浏览这个问题,我附上了密码生成的摘要,

protected System.Security.SecureString SecurePwd(string pwd)
{
    SecureString securePwd = new SecureString();

    foreach (char ch in pwd.ToCharArray())
        securePwd.AppendChar(ch);

    return securePwd;
}

我看到您已经尝试为过程启动模拟输入特定的用户名和密码,但是您说该过程访问另一台计算机上的文件,但是我看不到要指定域名的提示,这大概是您需要的访问远程文件?
像这样:

info.Domain = "domainname";
info.UserName = "dummyUsEr";
info.Password = "DummyPWd";

另外,this.SecurePwd()的作用是什么,您是否仅使用传递给它的直接密码字符串进行了尝试?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM