嵌入个性化的代码到ClickOnce setup.exe

本文关键字:ClickOnce setup exe 代码 个性化 | 更新日期: 2023-09-27 18:07:18

我知道可以通过URL将参数传递给在线启动的ClickOnce应用程序。但是,大多数用户下载setup.exe并从他们的机器上启动它。我是否可以在下载时重写setup.exe,插入代码(假设是用户的电子邮件地址),然后在了解代码的情况下启动应用程序?假设我们可以以某种方式重新签名setup.exe,使其合法。

假设。net 3.5.

Update这里的目标是将电子邮件地址和/或推荐信息传递给setup.exe,以便即使用户从不同的机器和不同的ip运行安装程序,我们也可以找出是谁做了推荐。

更新2假设。net 3.5 SP1,它有帮助吗?显然,现在可以在脱机时将参数传递给.application。是否有可能将参数嵌入到setup.exe中,以便它调用.application?当setup.exe运行时,Ref =某人?

嵌入个性化的代码到ClickOnce setup.exe

如果您的目标是将客户id(电子邮件,代码等)嵌入到exe中,我能想到的最简单的方法是使用IPropertyStorage和IPropertySetStorage接口。如果你有勇气,你可以通过p/invoke直接在IPropertySetStorage上调用方法,或者你可以走简单的路线,使用微软准备好的COM包装器,它被称为dsoffile .dll。

请注意,虽然dsofile用于办公文档,但它确实适用于任何文件-包括.exe文件-您只是被预定义的属性名称所困扰。为什么不将客户id放入. comments属性中呢?只要这样做,你可以再次解析出来。

下面是一个示例:

var doc = new OleDocumentPropertiesClass();
doc.Open(pathToFile);
doc.SummaryProperties.Comments = "joe@test.com";
doc.Save(); 

当然,您需要首先将它复制到一个临时位置,并且在用户下载它一段时间后,您可能想要删除它。

你可以把dsoffile .dll和你的应用捆绑在一起,注册为一个依赖,然后在你的安装程序中使用它来读取属性。或者,如果你可以在没有它的情况下调用IPropertyStorage,那么你就不会有依赖关系。

另一件要研究的事情是使用由Shell32.dll读取的扩展文件属性。我只是还没能找到一种简单明了的方式来写它们。如果你走这条路,请分享你是如何写属性到你的。exe。

看看InPlaceHostingManager类在这种情况下是否可以帮助您。它可能不会完全满足你的要求。但也许能帮上忙…

任何基于。exe文件的ClickOnce应用程序都可以静默由自定义安装程序安装和更新。自定义安装程序可以在安装期间实现自定义用户体验,包括自定义对话框用于进行安全和维护操作。执行安装操作时,自定义安装程序使用InPlaceHostingManager类。

演练:为ClickOnce应用程序创建自定义安装程序

编辑

我不确定你是否能完全按照你在问题中描述的方式实现你想要的。检查这些线程是否对你有帮助。

在ClickOnce应用程序中访问本地和远程数据

如何在ClickOnce部署中包含自定义数据文件?

如何:在在线ClickOnce应用程序中检索查询字符串信息

您如何想象在下载时"重写"setup.exe ?如果用户没有使用提供的链接(url)打开应用程序,而是直接从本地网络共享下载文件,则无法拦截。

我会尝试使用权限并让用户从提供给他们的链接执行它,但无法直接连接到共享或网址并下载它。我不确定这是否可行。

您可以尝试将该信息作为资源嵌入到exe中。下面是一个更新exe资源的c++示例。http://msdn.microsoft.com/en-us/library/ms648008 (v = vs.85) . aspx # _win32_Updating_Resources

您应该结合Charith和Josh的方法-基本上,配置您的web服务器,以便您可以根据URL参数生成新的设置。使用自定义安装程序从资源中读取setup.exe的引用信息。查看此链接了解如何在c#中操作本机应用程序的资源-在生成设置时必须写入资源文件,并且需要从自定义安装程序中读取它。

生成自定义设置的另一种方法是通过嵌入必要信息的命令行构建可执行程序或辅助程序集。然后从命令行工具构建设置(参见http://msdn.microsoft.com/en-us/library/xc3tc5xx.aspx)。与修改已经构建的安装程序的资源相比,生成自定义安装程序似乎相当麻烦,并且需要很长时间。

一种完全不同的方法是在用户下载应用程序时通过电子邮件发送唯一的推荐代码(注册代码)。在安装程序(或应用程序)中,使用自定义安装程序提示用户输入此代码。如果安装是通过URL调用的,那么代码将从那里可用,在这种情况下,自定义安装程序不需要请求代码。当用户下载安装程序时,您发送的电子邮件应该通知用户将代码与安装文件一起保存到某个文本文件中。