从ASP.NET网页启动作为大型软件包一部分的程序

从ASP.NET网页启动作为大型软件包一部分的程序,asp.net,vb.net,pdflatex,Asp.net,Vb.net,Pdflatex,我正在从事的项目需要在ASP.NETVB网页中生成一个LaTeX文件,并运行PDFLaTeX程序编译成PDF 我在VisualStudio中的本地web服务器上尝试了这个方法,效果很好。但是,当我在IIS中为同一应用程序目录创建虚拟主机时,当ASP.NET在发布模式下编译时,无法再在将信息事件写入系统事件日志的情况下调用PDFLaTeX: Application popup: pdflatex.exe - Application Error : The application was unabl

我正在从事的项目需要在ASP.NETVB网页中生成一个LaTeX文件,并运行PDFLaTeX程序编译成PDF

我在VisualStudio中的本地web服务器上尝试了这个方法,效果很好。但是,当我在IIS中为同一应用程序目录创建虚拟主机时,当ASP.NET在发布模式下编译时,无法再在将信息事件写入系统事件日志的情况下调用PDFLaTeX:

Application popup: pdflatex.exe - Application Error :
The application was unable to start correctly (0xc0000142).
Click OK to close the application.
如果应用程序是在调试模式下编译的,则出现无法调用计算机调试管理器的错误:
特定于应用程序的权限设置不会为具有CLSID的COM服务器应用程序授予本地激活权限…

这里的一些答案建议将一个exe移动到网站的虚拟目录中运行。在我的特殊情况下,这几乎是不可能的,因为我需要调用PDFLaTeX将.tex文件编译成.pdf。出于显而易见的原因,我无法将整个texlive安装移动到每个web应用程序的虚拟文件夹中

该应用程序在VS本地开发服务器上运行良好,并将latex文件编译成PDF
DOM\usr
是一名本地管理员,有权读取和写入所有相关目录。我们现在真的不关心安全问题,有几个充分的理由,我们只需要让它即使在黑客面前也能正常工作,不管它有多脏

Protected Sub btnPDF_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnPDF.Click
    Try
        Dim p As Process = New Process()
        p.StartInfo.UseShellExecute = False
        p.StartInfo.Domain = "DOM"
        p.StartInfo.UserName = "usr"

        Dim ss As SecureString = New SecureString
        For Each c In s.ToCharArray()
            ss.AppendChar(c)
        Next

        p.StartInfo.Password = ss 'Password set elsewhere
        p.StartInfo.FileName = "D:\texlive\2013\bin\win32\pdflatex.exe"
        p.StartInfo.Arguments = "D:\a.tex"
        p.StartInfo.WorkingDirectory = IO.Path.GetDirectoryName(p.StartInfo.Arguments)
        p.StartInfo.RedirectStandardOutput = True
        p.StartInfo.RedirectStandardError = True
        p.Start()
        Dim output As String = p.StandardOutput.ReadToEnd()
        Dim errors As String = p.StandardError.ReadToEnd()
        p.WaitForExit()

        LogEvent(output, EventLogEntryType.Information) ' These 2 events 
        LogEvent(errors, EventLogEntryType.Warning)     ' have empty event text
    Catch ex As Exception
        LogEvent(ex.Message, EventLogEntryType.Error)
    End Try
End Sub

Private Sub LogEvent(ByRef msg As String, ByRef t As EventLogEntryType)
    Dim eventLogPerm As EventLogPermission = New EventLogPermission(EventLogPermissionAccess.Administer, ".")
    eventLogPerm.PermitOnly()

    Dim evLog As EventLog = New EventLog
    evLog.Source = "ASP.NET 2.0.50727.0" ' Quick hack to not have to register new source
    evLog.WriteEntry(msg, t)
End Sub

这可能是应用程序池标识的权限问题。检查应用程序池(运行web应用程序的应用程序)使用的IIS帐户。使用具有足够权限的帐户来执行您需要运行的程序。

这可能是应用程序池标识权限的问题。检查IIS应用程序池(您的web应用程序在其下运行)使用的帐户。ApplicationPoolIdentity检查生产IIS,该IIS将在何处运行,并且它们正在使用网络服务。请尝试使用管理员帐户,而不是使用应用程序池的管理员帐户。我们现在将通过创建一个域组和域用户来加强安全性,然后为用户调用PDFLaTeX所需的少量文件夹授予权限。