0

VB.net でコマンド ライン ユーティリティの使用を自動化する必要があります。ここに例があります。

コードから、コマンド ライン ユーティリティを使用してファイルを復号化する必要があります。コマンドラインの手順は次のとおりです。

この行を使用してユーティリティを開始します

C:\gnupg>gpg --decrypt c:\temp\File_Encr.xml

実行すると、これが表示されます

You need a passphrase to unlock the secret key for user: "xxxx <abc@def.com>" 1024-bit ELG-E key, ID ABCD, created 2013-10-25 (main key ID DEF)

パスフレーズを入力してください:

パスフレーズを入力すると、それが機能します。このプロセスをコード (VB.NET) から開始し、パスフレーズを入力して、ユーザーの操作を必要としないようにする必要があります。私のコードは、Windows サービスと Web アプリケーションで使用されます。

誰かがこれについて助けてくれますか?

ありがとうございました。サミールズ

4

1 に答える 1

0

これが私が使用するコードスニペットです。

すべての出力コードは、便宜上 Visual Studio のデバッグ ウィンドウに書き込まれます。すべてのプログラム出力は、すべて出力ハンドラーにリダイレクトされます。これにより、プログラムからの出力を「リアルタイム」で検査できます。出力行を監視し、特定のフレーズをスキャンしてからアクションを実行する必要がある場合は、Sub OutputReceivedHandler() で簡単に実行できます。

それがどのように機能するかを見ることができるように、私はそれを一般的にしようとしました:



    Imports Microsoft.VisualBasic
    Imports System.Diagnostics
    Imports System

    Public Class ExternalUtilities

        Private myprocess As Process
        Private SW As System.IO.StreamWriter
        Private myprocess_HasError As Boolean = False
        Private myprocess_ErrorMsg As String = ""
        Private myprocess_Output As String = ""

        Public Sub New()
            ' do init stuff here.
            ' maybe pass the executable path, or command line args.
        End Sub

        Public Sub launchUtilityProcess1()

            Dim executeableFullPath As String = "C:\Path\To\file.exe"

            ' define the process
            myprocess = New Process
            myprocess.StartInfo.FileName = executeableFullPath
            myprocess.StartInfo.RedirectStandardInput = True
            myprocess.StartInfo.RedirectStandardOutput = True
            myprocess.StartInfo.RedirectStandardError = True
            myprocess.StartInfo.UseShellExecute = False
            myprocess.StartInfo.CreateNoWindow = True
            myprocess.StartInfo.WorkingDirectory = System.IO.Path.GetDirectoryName(executeableFullPath)
            myprocess.StartInfo.Arguments = "--decrypt c:\temp\File_Encr.xml"

            ' add handlers to monitor various conditions
            myprocess.EnableRaisingEvents = True
            AddHandler myprocess.OutputDataReceived, AddressOf OutputReceivedHandler
            AddHandler myprocess.ErrorDataReceived, AddressOf ErrorReceivedHandler
            AddHandler myprocess.Exited, AddressOf ExitedHandler

            ' launch
            Try
                myprocess.Start()

                ' redirect this processes IO
                SW = myprocess.StandardInput
                SW.AutoFlush = True

                ' use asynchronous reading so buffers dont fill up
                myprocess.BeginOutputReadLine()
                myprocess.BeginErrorReadLine()

                ' wait for program to end
                myprocess.WaitForExit()
                myprocess.Close()
                SW.Close()
                myprocess.Dispose()

                ' check for errors
                If myprocess_ErrorMsg  "" Then
                    ' something bad happened, handle it.
                End If

            Catch ex As Exception
                ' something bad happened, handle it.
            End Try


        End Sub

        Private Sub OutputReceivedHandler(ByVal sendingProcess As Object, ByVal line As DataReceivedEventArgs)

            If Not line.Data Is Nothing Then

                If line.Data = "string to search for..." Then
                    ' when this string is detected, send more output
                    SW.Write("helloworld" & System.Environment.NewLine)
                ElseIf line.Data = "something else..." Then
                    ' when this string is detected, send more output
                    SW.Write("goodbyeworld" & System.Environment.NewLine)
                End If

                Debug.WriteLine(line.Data)
            End If

        End Sub

        Private Sub ErrorReceivedHandler(ByVal sendingProcess As Object, ByVal line As DataReceivedEventArgs)

            Debug.WriteLine(line.Data)

            '   These executables send newlines on the STDERR path, ignore newlines
            If line.Data <> "" Then
                myprocess_HasError = True
                myprocess_ErrorMsg = line.Data
            End If

        End Sub

        Private Sub ExitedHandler(ByVal sender As Object, ByVal e As System.EventArgs)
            Debug.WriteLine("Process Exited")
        End Sub

    End Class


于 2013-10-31T10:49:14.583 に答える