繁体   English   中英

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

[英]Launching a ClickOnce application from another ClickOnce application

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

我试图将这个过程减少到一两次点击: - 点击我网站上指向 ClickOnce .application文件的链接。 - 再次单击以运行它。

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

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

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

Process.Start(ApplicationURL);

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

(我的问题非常类似于 Stack Overflow 问题Run a ClickOnce application from a pages without user action )。

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

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

网上还有其他几篇文章讨论了使用这种策略,但是我没有找到 dfshim.dll,ShOpenVerbApplication 的任何官方文档。

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

更新

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

至少有 2 种其他方法可以启动 ClickOnce 应用程序。

一种简单的方法是Process.Start("PresentationHost.exe", "-launchApplication " + ApplicationURL); 正如微软在此处记录的那样。

更复杂的方法是调用ShellExecuteEx() Win32 API,代码如下:

SHELLEXECUTEINFO info = new SHELLEXECUTEINFO();
info.cbSize = System.Runtime.InteropServices.Marshal.SizeOf(info);
info.lpFile = ApplicationURL;
info.nShow = SW_SHOWNORMAL;
info.fMask = SEE_MASK_CLASSNAME;
info.lpClass = "Application.Manifest";
ShellExecuteEx(ref info);

可以在此处找到所需的 Win32 API 导入和结构定义。 此方法将查询注册表并运行“rundll32.exe dfshim.dll,ShOpenVerbApplication”(或在HKEY_CLASSES_ROOT\Application.Manifest下配置的任何其他内容)。

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

以下是启动 clickonce.application 的方法

方法 1:从 URL 启动

方法一:

string app = "http://domain.xyz/ClickOnce.application";
Process.Start("rundll32.exe", "dfshim.dll,ShOpenVerbApplication " + app);

方法二:

string app = "http://domain.xyz/ClickOnce.application";
Process.Start("IExplore.exe", app);

方法 2:直接从 .application 文件启动 ClickOnce.application

string app = "file://C:/ClickOnce.application";
Process.Start("rundll32.exe", "dfshim.dll,ShOpenVerbApplication " + app);

另一种选择是使用Launcher::LaunchUriAsync和 LauncherOptions.ContentType = "application/x-ms-application"。 这称为“uri 直接调用”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM