VB.NET

ClickOnceアプリケーション

投稿日:

はじめに

Internet Explorerのサポートが終了したため、Edgeに切り替えて利用しようと思っても、ClickOnceアプリケーションから別のClickOnceを起動するときにIEの時のように思い通りに動いてくれません。

ネットでいろいろ検索してみたところこちらの記事を見つけました。

ClickOnceをブラウザ経由せずに実行する。(C#)

ブラウザを経由しなければ、Edge関係無いよねな対応です。

対応方法

私が利用していた環境では、メニューアプリをデスクトップにショートカットをおいているのでインストールしてしまえば、問題無く利用できるのですが、このメニューから呼び出すアプリケーションは、IEにパラメータを渡して起動しておりました。

これを少しだけ変更することで上手くうごかすことができました。

元のプログラム

    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に定義してあります。

修正したプログラム

    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)パラメータを新しく用意して、それを渡します。

おわりに

修正箇所がすごく少なくて済むのでおすすめではありますが、すべての状況・環境で動作するかはわかりませんし、動作の保証も不明なので十分検証の上自己責任でご利用いただくことをお願いいたします。

 

スポンサードリンク

スポンサードリンク

-VB.NET
-, , , ,

Copyright© あきらちんの技術メモ , 2024 All Rights Reserved Powered by STINGER.