別プログラムへの変数受け渡し

タグの編集
投稿者 ytyt  (社会人) 投稿日時 2021/11/17 12:09:41
SEとして働いているものです。VBは独学での勉強で初心者です。
質問の仕方が分かりずらいかもしれませんがご容赦ください。

VisualBasic2012を使いプログラムを書いています。
ログイン と メインメニュー というVisualBasic2012で作成したものが別々で存在しており
ログインのボタン1のClickイベントでメインメニューを起動、起動した際にログインで持っている変数をメインメニューに渡す。という処理がしたいです。

現在、ログインのボタン1のClickイベントには
Dim p as System.dialognostics = System.dialognostics.Process.Start(メインメニューのexeのパス)
というプログラムを記入しており、正常にメインメニューを起動させることが出来ています。
ただ、変数の渡し方がわからず困っています。
投稿者 るきお  (社会人) 投稿日時 2021/11/17 20:08:03
コンパイルすると別々の2つのexeになるWindowsフォームアプリケーションをを、パラメーター付きで呼び出したいということだと理解しました。
いくつかやりかたはありそうです。たとえば、このような感じです。

ログイン側(呼び出す側)
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim path As String = "C:\temp\publish\WinFormsApp1.exe"
    Dim p As System.Diagnostics.Process = System.Diagnostics.Process.Start(path, {"ABC""123"})
End Sub


メインメニュー側(呼び出される側)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    Dim param1 As String = My.Application.CommandLineArgs(0)
    Dim param2 As String = My.Application.CommandLineArgs(1)

    MsgBox(param1 & " と " & param2 & " を受け取りました。")

End Sub


>Dim p as System.dialognostics = System.dialognostics.Process.Start(メインメニューのexeのパス)
既にできている部分を正確に書いていただけると助かります。
たとえ、それが動かないプログラムであっても、回答者が書いていないことをあれこれ推測したり、補って検証する時間が節約できて回答に集中できます。


あと、exeにする形式だと、エンドユーザーがメインメニューの方を直接起動できてしまいますし、悪意のあるユーザーの場合、メインメニューと同じ名前のexeを仕込んでおいて、渡されてきたパラメーターを記録してしまうことでログイン情報を取得できたり、都合が悪いこともあります。最近はあまり見かけない設計のように思います。

他の設計候補としては次のようなものがあるように思います。
①1つのexeに全機能を集約する。これだと画面間の連携が普通の関数呼び出しのようにできます。
②エントリイーポイントとなる小さなexeを用意して、他の機能はライブラリとして提供する。これだと機能ごとにファイルを小分けできてさらに、画面間の連携を普通の関数呼び出しのようにできます。
③Webアプリケーションにする。これだと配布の手間がありません。

Windowsフォームアプリケーションの場合、クリックワンスを使って配布の手間を軽減するという手もあります。(が、Chromeでも使えたかどうか??私はクリックワンスは敬遠しています。)