はじめに
Internet Explorerのサポートが終了したため、Edgeに切り替えて利用しようと思っても、ClickOnceアプリケーションから別のClickOnceを起動するときにIEの時のように思い通りに動いてくれません。
ネットでいろいろ検索してみたところこちらの記事を見つけました。
「ClickOnceをブラウザ経由せずに実行する。(C#)」
ブラウザを経由しなければ、Edge関係無いよねな対応です。
対応方法
私が利用していた環境では、メニューアプリをデスクトップにショートカットをおいているのでインストールしてしまえば、問題無く利用できるのですが、このメニューから呼び出すアプリケーションは、IEにパラメータを渡して起動しておりました。
これを少しだけ変更することで上手くうごかすことができました。
元のプログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
Private Sub Menu1Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Menu1Button.Click, Menu1ToolStripMenuItem.Click Dim myMenuPara As String = String.Empty myMenuPara = String.Format("{0}?User_Id={1}", My.Settings.menu1, Me.UserID) StartSystem(myMenuPara) End Sub Private Sub StartSystem(ByVal parameter As String) Try Me.Cursor = Cursors.WaitCursor Dim startInfo As New ProcessStartInfo("IExplore.exe") With startInfo .WindowStyle = ProcessWindowStyle.Minimized .Arguments = parameter End With Process.Start(startInfo) Catch ex As Exception MessageBox.Show(ex.Message) Finally Me.Cursor = Cursors.Default End Try End Sub |
(1)Menu1Buttonがメニューボタンでいくつもあり、これをクリックしたときに別のClickOnceアプリケーションを呼び出します。
(2)StartSystemでは、IEにパラメータを渡して実行します。
※My.Settings.menu1は、http://サーバ/Chumon/Chumon.application のClickOnceアプリケーションのURLです。app.configに定義してあります。
修正したプログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Private Sub StartSystem(ByVal parameter As String) Try Me.Cursor = Cursors.WaitCursor 'Dim startInfo As New ProcessStartInfo("IExplore.exe") Dim startInfo As New ProcessStartInfo("rundll32.exe") Dim newParameter As String = String.Format("dfshim.dll,ShOpenVerbApplication {0}", parameter) With startInfo .WindowStyle = ProcessWindowStyle.Minimized .Arguments = newParameter End With Process.Start(startInfo) Catch ex As Exception MessageBox.Show(ex.Message) Finally Me.Cursor = Cursors.Default End Try End Sub |
修正箇所はちょっとだけです。
(1)IExplore.exeをrundll32.exeに置き換えます。
(2)パラメータを新しく用意して、それを渡します。
おわりに
修正箇所がすごく少なくて済むのでおすすめではありますが、すべての状況・環境で動作するかはわかりませんし、動作の保証も不明なので十分検証の上自己責任でご利用いただくことをお願いいたします。