😅

ClickOnce でパラメーター受けて WinForm を開けたい

2023/12/21に公開

前の先輩が作った WinForm アプリケーションの起動はとても不安定です。
システムを動くになるように、同じアプリケーションを二回起動の必要があります。

初回起動は A モードを開いて、第二回起動は B モードを開きます。
この2つのモードを同時走っていらないとシステムは作動出来ないです。

ここの問題は、このアプリケーションは2回同時起動すれば、2つのプロセスはBモードで稼働というバグです。
しかもこのアプリケーションはPowerShellで再起動する必要があるです。
ここではもう Powershell で 1分の Sleep を加えたんですけど、偶に2つのBモードプロセスが出る事があります。
そこで、パラメーターで起動モード決める機能を追加したいと思います。

開発環境は問題がないけど、ClickOnceになったら問題だらけ😭

開発環境では Environment.GetCommandLineArgs() でパラメーターを読み込んだけど、全然問題がなくて走る事が出来ました。

try
  {
      args = Environment.GetCommandLineArgs();
      mode = args[1]; // read first arg
  }
  catch
  {
      this.textBox2.AppendText(DateTime.Now + "timer2_Tick: argument not exitst");
      this.textBox2.AppendText(Environment.NewLine);
  }

すると

bin/ExampleApplication.exe status

開発環境はOK

正しく読み出しました。ここで多分問題がないと思って、ClickOnceにPublishして
PowerShellで起動してみるをやっている時…

読み出す事ができなくなりました!!!

ClickOnce になってもパラメーターを読み出して欲しい

この文章を参考して試したら、パラメーターがようやく読み出すになりました😭
ClickOnceアプリを引数付きで起動したい話 @ Qiita

この文章がもう詳しく説明しましたので、こちらが解決したバグだけを書いて行きます。

  • ショートカットを作成
    デプロイ環境はもともとショットカットが作成しましたが、拡張子は .lnk です。
    パラメーターを渡したいなら、拡張子は .appref-ms にならないといけなさそうです。
    ここで一旦 .lnk のショットカットを削除して、もう一度アプリケーションのを再インストールした後、 .appref-ms のショットカットが自動作成されました。
    この .appref-ms のショットカットでパラメーターを渡してみたら、ついにせいこうしました😭
    本番もOK

以上です。もしWinFormアプリケーションにパラメーターを渡す事が必要があれば、この文章を参考になれば幸いです。

GitHubで編集を提案

Discussion