2011-01-14 9 views
1

をプロセスを作成できません、私は次のように動作され、すでに存在している古いプロセスを更新しています:は、ASPサイトからCOMオブジェクトに

ユーザーが次のASP(簡略化され、変更の名前を走るフォームを送信します):

<% 
    set rb = Server.CreateObject("RecordBuilder.SomeObject") 
    rb.Calculate() 
    rb.StartProcess() 
    %> 

RecordBuilder.SomeObject私はVB6を持っていないので、私は予想通りCalculate()作品にVB.NeT 4.0

への呼び出しを、それを変換し、古いVB6 DLLた、StartProcess()への呼び出しが失敗しました。

StartProcess()は以下の通りです:

Public Function StartProcess() 
    Try 
     strProcess = "Starting process" 
     Dim proc = New Process() 
     proc.StartInfo.RedirectStandardOutput = True 
     proc.StartInfo.UseShellExecute = False 
     proc.StartInfo.CreateNoWindow = True 
     proc.StartInfo.FileName = "d:\App\RecordProcessor.exe" 

     Dim procHandle = proc.Start() 
     strProcess = "Started process" 
    Catch ex As Exception 
     Err.Raise(vbObjectError + 9999, "RecordBuilder.SomeObject", strProcess & " failed: " & ex.Message & "<hr />Stack Trace:<br />" & ex.StackTrace) 
    End Try 
End Function 

これは私が期待通りに動作します.vbsファイルにテストASPをコピーがあれば、proc.Start()への呼び出しで失敗します。

d:\App\RecordProcessor.exeのアクセス許可を、グループEveryoneに実行許可を与えるように変更しました。

+0

あなたはどのような例外がスローされますか? – Kev

+0

これは機能しています。 "sn -k"の代わりにVisual Studio内からStrong Name Keyを再生成しました。さらに、RedirectStandardOutput、UseShellExecute、およびCreateNoWindowがすべて正しく設定されていない場合、ウィンドウ内でアプリケーションを実行しようとし、アクセスが拒否されて失敗します。 – user575846

答えて

0

ウェブサイトの匿名ユーザーアカウントに、d:\appフォルダーとそれが触れている可能性のある他のフォルダーに関する必要なアクセス許可があることを確認します。

あなたのproc.Start()の後に見つからないことがあります。proc.WaitForExit()です。

あなたは、おそらくあなたは、同様のプロセスそのものからのエラーを取り込むことができることとします

Dim stdError As New String 
Try 
    strProcess = "Starting process" 
    Dim proc = New Process() 
    proc.StartInfo.RedirectStandardOutput = True 
    proc.StartInfo.RedirectStandardError = True 
    proc.StartInfo.UseShellExecute = False 
    proc.StartInfo.CreateNoWindow = True 
    proc.StartInfo.FileName = "d:\App\RecordProcessor.exe" 

    Dim procHandle = proc.Start() 
    strProcess = "Started process" 

    proc.WaitForExit() 

    stdError = proc.StandardError.ReadToEnd() 
    If stdError.Length > 0 Then 
     '' So long since I did VB so next line might need tweaked 
     Err.Raise(vbObjectError, "Caught StdError", stdError) 
    End If 
Catch ex As Exception 
    Err.Raise(vbObjectError + 9999, "RecordBuilder.SomeObject", strProcess & _ 
     " failed: " & ex.Message & "<hr />Stack Trace:<br />" & ex.StackTrace) 
End Try 
+0

ありがとうございました.D:\ appフォルダ全体に "Everyone"グループの読み取りと実行権限を与えました。私は実際のメソッドでproc.WaitForExit()を使用していますが、私はproc.Start呼び出しのトラブルシューティングにテストメソッドを使用しています。 proc.Start()呼び出しで例外がスローされるので、StandardErrorから何も読み取られません。 – user575846

+0

@user - 例外はスローされますか? – Kev

関連する問題