0

VB プログラムから cmd.exe でシャドウ コマンドを実行しようとしていますが、何らかの理由でコマンドを実行できません。コマンドをバッチ ファイルに保存し、正常に実行できましたが、引数/コマンドをコマンド プロンプトに直接渡して、この方法で実行することをお勧めします。基本的に、セッションIDとサーバー名を抽出するために作成した別のプログラムをユーザーに実行させます(その後、サーバー番号を最後から削除します)。彼らは最後に 4 桁のパスコードを取得します。最初の 2 つはセッション ID で、最後の 2 つはサーバー番号です (すべてのサーバーには smdts-(数字) という名前が付けられているため、サーバーの番号が気になります) 4 桁のコードを取得し、シャドウ管理プログラムにプラグインします。これが私の現在のコードです仕事:

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim SessId As String
    Dim PassCode As String
    Dim ServNum As String
    Dim Prc As Process

    PassCode = TextBox2.Text
    SessId = PassCode.Substring(0, 2)
    ServNum = PassCode.Substring(PassCode.Length - 2)
    Dim fileargs As String = " shadow" + " " & SessId + " " + "/server:smdts-" + ServNum

    Dim Pinfo = New System.Diagnostics.ProcessStartInfo
    Pinfo.FileName = "cmd.exe"
    Pinfo.Arguments = fileargs
    Pinfo.ErrorDialog = False
    Pinfo.UseShellExecute = False
    Pinfo.CreateNoWindow = False
    Pinfo.WindowStyle = ProcessWindowStyle.Normal
    Pinfo.RedirectStandardOutput = False
    Pinfo.RedirectStandardInput = True
    Pinfo.RedirectStandardError = False

    Prc = New Process
    Prc.StartInfo = Pinfo
    Prc.Start()

End Sub

何が機能しますか(使用したくないバッチファイル):

Public Class Form1
Public pathvar As String = Environment.GetFolderPath(Environment.SpecialFolder.Personal)

    Dim SessId As String
    Dim PassCode As String
    Dim ServNum As String

    PassCode = TextBox2.Text
    SessId = PassCode.Substring(0, 2)
    ServNum = PassCode.Substring(PassCode.Length - 2)
    Dim fileargs As String = " shadow" + " " & SessId + " " + "/server:smdts-" + ServNum

    Dim Streamwriter As StreamWriter
    Streamwriter = File.CreateText(pathvar + "\ShadowBatch.bat")
    Streamwriter.WriteLine(fileargs)
    Streamwriter.Close()
    Shell(pathvar + "\ShadowBatch.bat")
End Sub

最初の例が機能しない理由についての助けをいただければ幸いです。ありがとう!

トム・K

4

1 に答える 1

1

shadow ...引数として CMD に渡しています。
CMD はそれをサポートしていません。

代わりに、 を渡す必要があります/c shadow ...。これにより、CMD にそのコマンドを実行して終了するように指示されます。

shadowまたは、CMD を経由せずに直接実行することもできます。

于 2013-02-06T19:17:22.507 に答える