Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 以管理员用户身份从IIS启动进程_Sql_Sql Server_Windows Server 2008 R2_Windows Server 2012 - Fatal编程技术网

Sql 以管理员用户身份从IIS启动进程

Sql 以管理员用户身份从IIS启动进程,sql,sql-server,windows-server-2008-r2,windows-server-2012,Sql,Sql Server,Windows Server 2008 R2,Windows Server 2012,大约一周来,我一直在研究一个从Windows Server 2008到2012的代码迁移问题。我已经做了大量的搜索,但没有任何东西能解决我所看到的问题 我正在开发一个web应用程序,我从另一个最近离开公司的开发人员手中接手。该应用程序使用fabric.js允许用户操作画布。稍后,它将画布渲染为base64字符串,将其转换为.Net中的图像,然后通过iTextSharp将图像添加到PDF中,从而生成PDF 由于此过程可能需要一段时间(计划在较大的页面集中完成),并且会干扰用户,并且在客户端浏览器的

大约一周来,我一直在研究一个从Windows Server 2008到2012的代码迁移问题。我已经做了大量的搜索,但没有任何东西能解决我所看到的问题

我正在开发一个web应用程序,我从另一个最近离开公司的开发人员手中接手。该应用程序使用fabric.js允许用户操作画布。稍后,它将画布渲染为base64字符串,将其转换为.Net中的图像,然后通过iTextSharp将图像添加到PDF中,从而生成PDF

由于此过程可能需要一段时间(计划在较大的页面集中完成),并且会干扰用户,并且在客户端浏览器的单独选项卡中可能会发生太多的责任,因此原始开发人员提出了一种从数据库中提取画布数据的方法,然后以所需的页面尺寸和比例重建画布,以便通过IE在服务器上打印

所以,.Net代码使用URL参数启动IE进程,该参数将IE打开到原始编辑器在其中所做更改的同一页面。此浏览器实例在服务器上打开,其参数允许它在打印模式下获取所需数据,以进行全尺寸文档渲染。浏览器呈现页面并生成base64图像字符串,设置为隐藏字段,然后发回服务器以处理为PDF。这个过程是通过AJAX启动的,服务器通过一个指向PDF的URL进行确认。浏览器通过JavaScript重定向到该文档

老实说,对我来说,这一切似乎很麻烦,但我没有更好的想法,事实上它在我们的登台服务器上工作

本周,决定将最新版本移动到客户端的新服务器上。当我们的暂存服务器运行Windows 2008 server时,新的是2012。问题就从这里开始

它使用以下(稍后解释)来打开流程 (*注意:userAccount是通过一个简单的函数获得的,该函数使用SecureString和已知良好的用户名值填充dynamic ExpanObject。):

我在服务器上看到的是,这段代码在没有启动流程的情况下直接运行。没有错误,观察服务器进程表明IE没有打开,即使我有意将它挂在using语句中。我的假设是,IIS用户没有启动桌面应用程序的权限,并且该应用程序正在悄无声息地失败。这导致我添加注释代码

在处理2012服务器上的测试之前,我决定为测试创建一个本地用户。给他们管理员权限,然后尝试通过该用户以“提升”权限启动IE,假设进程没有在2012服务器上启动的原因是更严格的安全环境。 当我添加用户名和密码时,进程错误地说,如果声明用户,我需要将UseShellExecute设置为false。当我检查ProcessStartInfo构造函数重载时,我发现当用户创建它时,需要一个域(对于:LDAP?,ASP?,测试结果相同)。但是,在Windows 7开发环境、2008或20012服务器中,通过taskman观察IE进程启动时,此配置不允许(我观察)

要定义问题,我可以撤消所有注释,它将失败。我可以按原样跑,它不会失败。我只能使用UseShellExecute取消注释,失败的原因与我还包括用户名和密码一样。在VisualStudio调试中观察ProcessStartInfo时,我看到了正确的值

所以,我想我有几个相关的问题,归结起来是:“天哪!请帮助服务器移动”。为什么在Server2008中,在没有定义UseShellExecute=false或UserName/Password/Domain组合的情况下,该过程可以正常启动,但如果我根本不解决它,并且知道默认值分别为true/NullOrEmpty,则该过程会成功

下一个问题是,我是否需要为我的新管理员用户定义任何其他权限,我将使用该用户的凭据在Windows 2008或2012 server下允许发生这种情况?由于管理员组权限被削弱,管理员用户是否需要在其操作路径或类似路径上定义权限?(我是否错误地认为我可以使用更高的安全设置测试Windows 7,但它会在这里失败,但不会在那里失败,这是通过API为两种环境提供的,因为它编译和所有环境都会失败?)

有没有可能这个进程,没有启动shell,正在启动,但没有完成,并且它隐藏在应用程序池的工作进程中,我需要考虑应用程序池


当然,我认为可能有用的任何东西都是受欢迎的。

这不起作用的原因是IIS没有获得执行命令的足够权限。IIS不应具有该权限

相反,我们编写了一个小型控制台应用程序,它与计划任务协同工作。任务运行rout。控制台应用程序监控系统,能够杀死坏进程,以便下次可以运行好进程

计划任务允许我在具有适当权限的特定用户下启动进程。 控制台应用程序允许我观察过程,并在任务出错或无法完成时进行清理。任务调度器将永远无法返回已完成的代码。启动选项卡式浏览器将生成要查看的窗口的父窗口。杀死一个标签永远不会破坏父项。控制台应用程序可能会出现问题


在hind站点中,我可以在控制台应用程序中完成这一切,但它是一种自行生长的动物,我打算简化它。

这不起作用的原因是IIS没有获得足够的权限来执行命令。IIS不应具有该权限

相反,我们编写了一个小型控制台应用程序,它与计划任务协同工作。任务运行rout。控制台应用程序监控系统,能够杀死坏的进程,也能杀死好的进程
String path = Environment.ExpandEnvironmentVariables(@"%PROGRAMFILES%\Internet Explorer\iexplore.exe");
    ProcessStartInfo startInfo = new ProcessStartInfo()
    {
        //FileName = "IEXPLORE",
        FileName = path,
        Arguments = "https://www.google.com",//REAL URL REMOVED
        //Password = (userAccount.password as SecureString),
        //UserName = userAccount.account.ToString(),
        //Domain = "MYCURRENTDOMAIN",//REAL DOMAIN REMOVED
        //UseShellExecute = false,
        //RedirectStandardOutput = true
    };