none
Process.Startでアプリの引数を渡したい RRS feed

  • 質問

  • 初めまして。質問させてください。

    以下はProcess.Startを使って、ノートパッドでマイドキュメントにある「test.txt」を開くプログラムです。これにノートパッドの引数(/e)を渡してやりたいのですが・・・。(実際にはノートパッドに/eの引数はありません)

     Private Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click
            'マイドキュメントを取得する
            Dim myDoc As String = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)

            Dim Process1 As New System.Diagnostics.Process
            Process1.StartInfo.FileName = "notepad.exe"
            Process1.StartInfo.Arguments = myDoc & "\test.txt"
            Process1.Start()

     End Sub

    よろしくお願いします。

    2006年4月8日 7:12

すべての返信

  •  kage さんからの引用
    (実際にはノートパッドに/eの引数はありません)

    それだったら、Explorer.exe で考えた方が宜しかろうと思います。

     C:\WINDOWS\explorer.exe /n, "C:\Program Files"

    とか。

    スイッチの後にカンマをおいてディレクトリを指定する。

    2006年4月8日 7:50
  • じゃんぬねっとさん、お世話になります。

    > それだったら、Explorer.exe で考えた方が宜しかろうと思います。
    > C:\WINDOWS\explorer.exe /n, "C:\Program Files"
    > とか。
    > スイッチの後にカンマをおいてディレクトリを指定する。

    なるほど、「ファイル名を指定して実行」に上記を貼り付けるとProgram Filesが表示されます。
    これを元に前記のファイルを書き直してみましたが
            Process1.StartInfo.FileName = "C:\WINDOWS\explorer.exe"
            Process1.StartInfo.Arguments = "C:\Program Files"
    と書くときちんと実行されます。
    ところが、「/n」をつけようと
            Process1.StartInfo.FileName = "C:\WINDOWS\explorer.exe /n"
            Process1.StartInfo.Arguments = "C:\Program Files"
    とすると、ファイル名エラーになります。
    「/n」のつけ方が依然不明です。よろしくお願いします。

    2006年4月8日 12:46
  •  kage さんからの引用
    ところが、「/n」をつけようと
            Process1.StartInfo.FileName = "C:\WINDOWS\explorer.exe /n"
            Process1.StartInfo.Arguments = "C:\Program Files"
    とすると、ファイル名エラーになります。

    スイッチはそこに付けてはいけないと思います。
    なぜならば、"C:\Windows/Explorer.exe /n" という実行ファイル名はないからです。
    (内部的に、FileName で指定した実行ファイル名は二重引用符で囲まれます)

    付けるならば、Aruguments 側じゃないでしょうか?

    2006年4月8日 15:36
  • じゃんぬねっとさん、こんにちは。
    返信が遅くなりました。

    > スイッチはそこに付けてはいけないと思います。
    > なぜならば、"C:\Windows/Explorer.exe /n" という実行ファイル名はないからです。
    > (内部的に、FileName で指定した実行ファイル名は二重引用符で囲まれます)

    > 付けるならば、Aruguments 側じゃないでしょうか?

    いろいろやってみました。
    Process1.StartInfo.Arguments = "/n C:\Program Files" とか
    Process1.StartInfo.Arguments = "C:\Program Files /n" とか
    「"」でくくってみたりもしましたが、いずれもファイルが無いとエラーになります。

    使おうと思っているファイルはWindows98の頃のものでスイッチが3個も必要です。
    Shellで立ち上げれば問題なく作動しますので困ってはいませんが、
    .Netらしいコードに置き換えようとこだわっているところです。

    2006年4月10日 9:51
  • >Process1.StartInfo.Arguments = "/n C:\Program Files" とか
    >Process1.StartInfo.Arguments = "C:\Program Files /n" とか

    試してませんが、
    Process1.StartInfo.Arguments = "/n, ""C:\Program Files """ でいいんじゃないでしょうか?

    2006年4月10日 9:55
    モデレータ
  •  じゃんぬねっと さんからの引用
    スイッチの後にカンマをおいてディレクトリを指定する。

    と、前の返信で書かせて頂きましたが、これは試されましたか?

    2006年4月10日 10:30
  • じゃんぬねっとさん、こんにちは。

    おかげ様で何とか解決できたようです。
    やはり、StartInfo.Argumentsの方でした。

            Process1.StartInfo.Arguments = "/F /E """ & fName & """"

    スイッチを2つつけました。開くファイルはfNameで変数で与えています。
    「"」でくくっていますから、スペース入りのパスでもOKです。

    各スイッチの後はスペースが必要です。

    じゃんぬねっとさんのHPを見させていただきました。
    見やすく整理されていて、非常に参考になりました。

    ありがとうございました。

    2006年4月11日 9:34
  • ひとつ書き忘れました。

    前記のコードは
    Visual Basic
     2005 Express Edition
    Visual Basic .Net 2003
    の両方で動作を確認しました。

    2006年4月11日 9:40