从另一个ClickOnce应用程序启动ClickOnce应用程序

我的目标是实际实现一键启动我的ClickOnce应用程序(或者我猜两个)。 该应用程序具有一些需要安装的先决条件。 确保Microsoft安装它们的常规方法是让用户决定是否具有先决条件,并下载并安装“setup.exe”,安装它们并运行ClickOnce应用程序。 这包括下载EXE文件(单击一下),运行它(两次单击),然后在安装必备软件之后再次单击以运行ClickOnce应用程序。

我正在尝试将此过程减少到一两次点击: – 单击我网站上的链接到ClickOnce .application文件。 – 再次单击以运行它。

我已经制作了另一个ClickOnce应用程序,其中包含一个setup.exe。 它检查是否已安装先决条件,如果是,则会自动运行其他ClickOnce应用程序。 如果没有,它运行包含的setup.exe,然后运行另一个ClickOnce应用程序。

我的问题是,当我尝试从这个运行其他ClickOnce应用程序时,它只是打开我的Web浏览器并下载.application文件而不运行它。

我正在尝试使用以下内容从我的C#代码中启动ClickOnce应用程序:

 Process.Start(ApplicationURL); 

我只想让它在ApplicationURL上自动启动应用程序。 有没有办法跳过我看到的浏览器参与?

(我的问题与Stack Overflow问题非常类似于在没有用户操作的情况下从网页运行ClickOnce应用程序 )。

正如评论中所指出的,您可以启动iexplore.exe进程来启动ClickOnce应用程序,而不依赖于默认浏览器。 您也可以使用dfshim.dll以与Windows资源管理器启动它相同的方式启动ClickOnce应用程序。

 Process.Start("rundll32.exe", "dfshim.dll,ShOpenVerbApplication " + ApplicationURL); 

还有一些在线文章讨论使用这种策略,但我没有找到任何dfshim.dll,ShOpenVerbApplication的官方文档。

  • 另一个Stack Overflow问题提到使用自定义.exe来安装.NET Framework,然后通过ShOpenVerbApplication启动ClickOnce应用程序。
  • Scott Hanselman在关于Firefox和ClickOnce的post中讨论了ShOpenVerbApplication作为具有application / x-ms-application MIME类型的文件的默认文件映射。

更新

正如其他Stack Overflow问题所提到的,您还可以使用dfshim.dllLaunchApplication命令,该命令记录在Microsoft的站点上 。 但是,某些旧版本的.NET Framework中不提供该命令。

查看通过InPlaceHostingManager手动安装的Microsoft演练 。 您可以通过编程方式进行自定义。