- PR -

applicationファイルをコマンドライン引数付きで別プログラムから起動したい

1
投稿者投稿内容
SIC
会議室デビュー日: 2005/09/01
投稿数: 14
投稿日時: 2006-12-21 12:05
開発言語:VB2005 Express Edition
OS:WindowsXP SP2

メニュープログラム(applicationファイル)から
各処理(applicationファイル)を起動しようとしています。
その際にメニュープログラムでの情報をコマンドライン引数で
各処理のプログラムに渡そうとしましたところ
コマンドライン引数が受け取られていないことが分かりました。

メニュープログラムのコード
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click

Try
Call System.Diagnostics.Process.Start( _
"起動したいapplicationファイル名", "引数1 引数2")

Catch ex As Exception
MsgBox(ErrorToString(), _
CType(MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation, MsgBoxStyle), _
System.Reflection.Assembly.GetExecutingAssembly.GetName.Name)
End Try
End Sub

各処理のコード
Imports VB = Microsoft.VisualBasic
Public Sub main()
'ここで何も表示されない
MessageBox.Show(VB.Command)

Using frm As Form = New Form1
Application.Run(frm)
End Using

Application.Exit()
End Sub

色々調べたところVB2005ではMy.Application.CommandLineArgsを使うというのを知り
MessageBox.Show(VB.Command)

MessageBox.Show(My.Application.CommandLineArgs(0))
で実行しても同じでした。

applicationファイルの起動の仕方が悪いのでしょうか?
それとも何か別の方法があるのでしょうか?
教えて下さい。よろしくお願いします。
HIRO
大ベテラン
会議室デビュー日: 2002/06/21
投稿数: 109
投稿日時: 2006-12-21 12:46
単純にコマンドライン引数を取得したいのですよね?

コード:

Dim strCmds() As String
strCmds = System.Environment.GetCommandLineArgs()
Dim cmd As String
For Each cmd In strCmds
Console.WriteLine(cmd)
Next



_________________
--------------------------------------------
HIRO's.NET VB.NETとC#のTipsを掲載しています

[ メッセージ編集済み 編集者: HIRO 編集日時 2006-12-21 12:53 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-12-21 13:00
引用:

SICさんの書き込み (2006-12-21 12:05) より:

コマンドライン引数が受け取られていないことが分かりました。


どの方法にしても (結局同じなので) 実装どおりの方法で取得できるハズですが...

引用:

'ここで何も表示されない


長さ 0 の文字列として、ダイアログは表示されますよね?

プロジェクトのプロパティにある、「コマンド ライン引数」 で指定した場合はどうでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
HIRO
大ベテラン
会議室デビュー日: 2002/06/21
投稿数: 109
投稿日時: 2006-12-21 15:03
 私の環境では、 MessageBox.Show(My.Application.CommandLineArgs(0)) は問題なく動作しましたよ

  MessageBox.Show(My.Application.CommandLineArgs(0))  は起動したいアプリケーションの方に記述してますよね?

_________________
--------------------------------------------
HIRO's.NET PowerShell,VB.NET,C#のTipsを掲載しています
HIRO's.NET Blog PowerShell,VB.NET,C#を中心とした技術ネ
SIC
会議室デビュー日: 2005/09/01
投稿数: 14
投稿日時: 2006-12-21 15:16
>HIROさん
>コード: --------------------------------------------------------------------------------
>Dim strCmds() As String
>strCmds = System.Environment.GetCommandLineArgs()
>Dim cmd As String
>For Each cmd In strCmds
> Console.WriteLine(cmd)
>Next
>--------------------------------------------------------------------------------

で試してみましたが、実行ファイル名だけが取得できて後は取得できませんでした。

”MessageBox.Show(My.Application.CommandLineArgs(0))  
は起動したいアプリケーションに記述しています。

>じゃんぬねっとさん
説明が足りませんでした。すみません。
何も表示されないのではなく長さ0の文字列がダイアログに表示されます。
プロジェクトのプロパティでコマンドライン引数を指定した場合はきちんと表示されます。

最初に書き忘れたのですが、
アプリケーションは全部「オンラインでのみ利用できる」を選択して
起動したいアプリケーションは「ClickOnceセキュリティ設定を有効にする」の
チェックボックスを外しています。
チェックを入れるとデバッグ時に
「現在のプロジェクト設定は、プロジェクトが特定のセキュリティのアクセス許可で
デバッグされることをしてしています。このモードでは、コマンドライン引数は
実行可能ファイルに渡されていません。デバッグを実行しますか?」
と表示されるためチェックを外しています。
HIRO
大ベテラン
会議室デビュー日: 2002/06/21
投稿数: 109
投稿日時: 2006-12-21 15:49
ClickOnceの場合、URLからロードされるのでコマンドライン引数が使えないのではないでしょうか?

_________________
--------------------------------------------
HIRO's.NET PowerShell,VB.NET,C#のTipsを掲載しています
HIRO's.NET Blog PowerShell,VB.NET,C#を中心とした技術ネ
SIC
会議室デビュー日: 2005/09/01
投稿数: 14
投稿日時: 2006-12-26 16:02
>HIROさん
どうやらご指摘の通りClickOnceではコマンドライン引数は使えないみたいでした。
なので別のファイルに出力する等の方法で受け渡しをしようと思います。

ありがとうございました。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2006-12-26 21:48
引用:

SICさんの書き込み (2006-12-26 16:02) より:
>HIROさん
どうやらご指摘の通りClickOnceではコマンドライン引数は使えないみたいでした。
なので別のファイルに出力する等の方法で受け渡しをしようと思います。


一応普通はクエリパラメータなどを使用します。
※まあ事情によりそうはしない場合もありますが…
1

スキルアップ/キャリアアップ(JOB@IT)