process.start を使用して実行可能ファイル (Graphviz) を呼び出す asp.net アプリケーションがあります。私の開発環境ではすべてうまくいきますが、本番環境に移るとプロセスを実行できません。詳細はこちら。
問題を示すために、この単純なサブを作成しました。
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim ProcessInfo As ProcessStartInfo
ProcessInfo = New ProcessStartInfo
'ProcessInfo.Domain = "xxxxxxx"
ProcessInfo.UserName = "xxxxxx"
Dim PwdString As String = "xxxxxxx"
Dim newPass As System.Security.SecureString
newPass = New System.Security.SecureString
For Each c As Char In PwdString
newPass.AppendChar(c)
Next c
ProcessInfo.Password = newPass
'ProcessInfo.FileName = """C:\Windows\System32\Notepad.exe"""
'ProcessInfo.FileName = """C:\Test.bat"""
ProcessInfo.FileName = """C:\Program Files (x86)\Graphviz2.30\bin\dot.exe"""
ProcessInfo.Arguments = " -Kdot -Tsvg C:\Test.dot -pC:\Test.svg"
ProcessInfo.RedirectStandardOutput = True
ProcessInfo.UseShellExecute = False
ProcessInfo.CreateNoWindow = True
Dim Process As Process
Process = New Process
Process.StartInfo = ProcessInfo
Process.Start()
'Wait until the process passes back an exit code
Process.WaitForExit()
Try
Dim ProcessResults As String = Process.StandardOutput.ReadToEnd
Output.Text = ProcessResults
Catch ex As Exception
Output.Text = ex.ToString
End Try
End Sub
ここには 3 つのシナリオがあります。まず、メモ帳を起動するだけでテストしています。・開発業務・生産業務(これが唯一、生産業務に携わることができた事例です)
次に、メモ帳でドキュメントを開く簡単なバッチ ファイルを作成しました。(メモ帳 c:\test.dot)
- 開発工事
- 生産が進まない
3 番目に、Graphviz の dot.exe を呼び出しています。これは、私が別のページで作業しようとしているものです。
- 開発工事
- 生産が進まない
プロダクションが機能しないすべてのケースで、この動作を再現できます。web.config に impersonate = true を追加すると、エラーは返されません。ページは成功したかのように実行されます。
偽装構成を追加せずに資格情報を ProcessInfo オブジェクトに追加すると、ページは再びエラーなしで実行されます。ただし、プロセスは本番環境では開始されません。
偽装または ProcessInfo 資格情報を追加しないと、エラーが発生します。これはエラー出力です。
アクセスが拒否されました
説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。
Exception Details: System.ComponentModel.Win32Exception: Access is
denied
Source Error:
Line 36: Process = New Process
Line 37: Process.StartInfo = ProcessInfo
Line 38: Process.Start()
Line 39:
Line 40: 'Wait until the process passes back an exit code
Source File: C:\Inetpub\vhosts\leapfrogbi.com\httpdocs\test\ProcessStart.aspx.vb Line: 38
Stack Trace:
[Win32Exception (0x80004005): Access is denied]
System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo) +2161
System.Diagnostics.Process.Start() +150
Test_ProcessStart.Page_Load(Object sender, EventArgs e) in C:\Inetpub\vhosts\leapfrogbi.com\httpdocs\test\ProcessStart.aspx.vb:38
System.Web.UI.Control.OnLoad(EventArgs e) +91
System.Web.UI.Control.LoadRecursive() +74
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2207
さまざまなセキュリティ関連の設定を試しました。現在、アプリ プールはローカル管理者の ID で実行されています。また、セキュリティが根本的な問題であるかどうかを確認するために、全員を管理者グループに追加しようとしました。
また、Plesk を使用してドメインを管理しています。この状況に影響を与える可能性のあるオプションを広範囲に検索しましたが、まだ見つかりません. 繰り返しますが、メモ帳を開始するための単純な呼び出しを行う場合、プロセスの開始は本番環境で機能します。詳細なログがなければ、これを絞り込むのは非常に困難です。
あなたが提供できる助けを前もって感謝します。これは私を夢中にさせています。