我知道可以通过URL将参数传递给在线推出的ClickOnce应用。但是,大多数用户下载setup.exe并从其计算机启动它。有没有什么办法可以在下载时重新编写setup.exe,插入一个代码(比方说用户的电子邮件地址),然后在知道代码的情况下启动应用程序?假设我们可以以某种方式重新签名setup.exe以使其合法。
假设.NET 3.5。
更新此处的目标是将电子邮件地址和/或引荐来源信息传递给setup.exe,以便即使用户从其他计算机运行安装程序而我们也可以谁做了推荐。
更新2 假设.NET 3.5 SP1,它有帮助吗?显然,现在可以在离线时将参数传递给.application。是否可以将参数嵌入到setup.exe中,以便在运行setup.exe时调用.application?ref = someone?
答案 0 :(得分:4)
好吧,如果您的目标是将客户ID(电子邮件,代码等)嵌入到exe中,我能想到的最简单方法是使用IPropertyStorage和IPropertySetStorage接口。如果您感觉很勇敢,可以通过p/invoke直接在IPropertySetStorage上调用方法,或者您可以使用Microsoft准备好的COM包装器(称为dsofile.dll)。
请注意,虽然dsofile适用于office文档,但它确实适用于任何文件 - 包括.exe文件 - 您只是使用预定义的属性名称。为什么不将您的客户ID转换为.Comments属性。只是这样做,你可以再次解析它。
以下是一个示例:
var doc = new OleDocumentPropertiesClass();
doc.Open(pathToFile);
doc.SummaryProperties.Comments = "joe@test.com";
doc.Save();
当然,您需要先将其复制到临时位置,并在用户下载后一段时间内删除它。
您可以将dsofile.dll与您的应用程序捆绑在一起并将其注册为依赖项,并在安装程序中使用它来读取该属性。或者,如果您可以在没有它的情况下调用IPropertyStorage,那么您就没有依赖性。
要研究的另一件事是使用Shell32.dll读取的扩展文件属性。我只是找不到一个干净的方式来轻松写它们。如果你走这条路,请分享你如何将属性写入.exe。
答案 1 :(得分:1)
在这种情况下,看看InPlaceHostingManager类是否可以帮助您。它可能不会完全符合您的要求。但也许可以帮助......
基于.exe文件的任何ClickOnce应用程序都可以是静默的 由自定义安装程序安装和更新。自定义安装程序可以 安装期间实现自定义用户体验,包括自定义 用于安全和维护操作的对话框。去表演 安装操作,自定义安装程序使用 InPlaceHostingManager上课。
Walkthrough: Creating a Custom Installer for a ClickOnce Application
修改强>
我不确定您是否能够按照您在问题中描述的方式完全达到您想要的效果。检查这些线程是否对您有帮助。
Accessing Local and Remote Data in ClickOnce Applications
How to include custom data files in ClickOnce deployment?
How to: Retrieve Query String Information in an Online ClickOnce Application
答案 2 :(得分:0)
您如何想象在下载时“重写”setup.exe?如果不是使用提供的链接(url)打开您的应用程序,而是用户直接从网络共享本地下载文件,则无法拦截此文件。
我会尝试使用权限并让用户从提供给他们的链接中执行它,但无法直接连接到共享或网址并下载它。不管怎样,不确定这是否可行。
答案 3 :(得分:0)
您可以尝试将该信息作为资源嵌入到exe中。 这是更新exe资源的c ++示例。 http://msdn.microsoft.com/en-us/library/ms648008(v=vs.85).aspx#_win32_Updating_Resources
答案 4 :(得分:0)
您应该结合Charith和Josh的方法 - 实质上,配置您的Web服务器,以便您可以基于URL参数生成新的设置。使用自定义安装程序从setup.exe的资源中读取引用信息。检查this link如何在C#中操作本机应用程序的资源 - 您必须在生成安装程序时写入资源文件,并且需要从自定义安装程序中读取它。
生成自定义设置的另一种方法是从嵌入必要信息的命令行构建可执行文件或帮助程序组件。然后从命令行工具构建设置(请参阅http://msdn.microsoft.com/en-us/library/xc3tc5xx.aspx)。它看起来非常麻烦,生成自定义设置需要很长时间,而不是修改已经构建的设置的资源。
完全不同的方法是在用户下载应用程序时通过电子邮件发送唯一的推荐代码(注册码)。在设置(或应用程序)中,使用自定义安装程序提示用户输入此代码。如果通过URL调用设置,那么代码将从那里获得,在这种情况下,Custom Installer不需要请求代码。用户下载设置时发送的电子邮件应通知用户将代码与设置文件一起预先存储到某个文本文件中。