我知道可以通过URL将参数传递给在线推出的ClickOnce应用程序.但是,大多数用户下载setup.exe并从其计算机启动它.有没有什么办法可以在下载时重新编写setup.exe,插入一个代码(比方说用户的电子邮件地址),然后在知道代码的情况下启动应用程序?假设我们可以以某种方式重新签名setup.exe,使其合法.
假设.NET 3.5.
更新此处的目标是将电子邮件地址和/或引用者信息传递给setup.exe,以便即使用户从不同的计算机和不同的IP运行安装程序,我们也可以确定谁进行了引用.
更新2假设.NET 3.5 SP1,它有帮助吗?显然,现在可以在离线时将参数传递给.application.是否可以将参数嵌入到setup.exe中,以便在运行setup.exe时调用.application?ref = someone?
好吧,如果您的目标是将客户 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();
Run Code Online (Sandbox Code Playgroud)
当然,您需要首先将其复制到临时位置,并且在用户下载它后的某个时间您会想要将其删除。
您可以将 dsofile.dll 与您的应用程序捆绑在一起,并将其注册为依赖项,并在安装程序中使用它来读取属性。或者,如果您可以在没有它的情况下 p/调用 IPropertyStorage,那么您将不会有依赖性。
另一件需要研究的事情是使用 Shell32.dll 读取的扩展文件属性。我只是无法找到一种干净的方法来轻松地编写它们。如果您采用此方法,请分享您如何将属性写入 .exe。
| 归档时间: |
|
| 查看次数: |
1209 次 |
| 最近记录: |