我的目标是真正实现一键启动我的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上自动启动应用程序。有没有一种方法可以跳过我所看到的浏览器参与?
(我的问题与堆栈溢出问题Run a ClickOnce application from a webpage without user action非常相似。
如注释中所指出,您可以启动iexplore.exe
进程以启动ClickOnce应用程序,而无需依赖默认浏览器。您还可以使用dfshim.dll
,以与Windows资源管理器相同的方式启动ClickOnce应用程序。
Process.Start("rundll32.exe", "dfshim.dll,ShOpenVerbApplication " + ApplicationURL);
[网上还有其他一些文章讨论了使用此策略,但是我没有找到dfshim.dll,ShOpenVerbApplication的任何正式文档。
更新
如另一个堆栈溢出问题所述,您也可以使用dfshim.dll
的LaunchApplication
命令,即documented on Microsoft's site。但是,该命令在.NET Framework的某些旧版本中不可用。
查看通过Microsoft walkthrough手动安装的InPlaceHostingManager。您可以通过编程进行自定义。
至少还有两种其他方法可以启动ClickOnce应用程序。
以下是启动clickonce.application的方法