我有一个 .NET C# 应用程序,包含在 MSI 安装程序中 - “myprogram.exe”。我有一个 PHP 网站和一个特定页面,用户可以通过链接下载该程序。
我希望能够跟踪 .NET 应用程序上的某些事件。例如 - “程序已打开”。
将事件发送到我的服务器很容易,但是如何从 php 服务器获取用户 ID,以便我可以知道哪个用户在 .NET 应用程序上做了什么?
我考虑过将参数(用户 ID)传递给 MSI 安装程序,但找不到方法。
如何在 PHP 用户 ID 和 .NET 应用程序之间链接?
澄清 -
许多人提出使用登录系统来绑定服务器和应用程序。
这确实是最简单的解决方案,但是在我的网站上,我不会强制用户登录来下载应用程序(我也不会在 .NET 应用程序中请求登录详细信息 - 它是可选的)。如果我们不必询问登录详细信息,我认为我们不应该这样做,用户的体验会更好(使用应用程序的步骤少得多) - 用户下载和使用桌面应用程序的机会更大。
考虑当前流程是->网页-下载点击-运行-使用应用程序
(需要 10 秒)
登录 -> 网页 - 注册(确认电子邮件?) - 重定向 - 下载点击 - 运行 - 应用程序登录 - 使用应用程序
(用户需要 60-120 秒)
从程序登录
最好的方法是让用户在您的程序中使用相同的凭据登录。这样,您的程序就可以使用安全的 OAuth2 身份验证与后端 API 进行通信。这也使得程序正在与互联网通信对用户来说是透明的。
在文件名中包含用户 ID
另一种方法是在下载过程中将用户 ID 添加到安装程序的文件名中,并在安装程序运行时将其解压缩。您必须检查您的安装程序工具是否允许这样做。另外,仅当您的用户 ID 是 UUID 或类似的名称时才执行此操作,因为您不希望用户猜测其他 ID。
应用程序配置
第三个选项是将用户 ID 添加到App.config
文件。有两种方法可以做到这一点:
- 使用以下命令创建您的 .msi
App.config
未压缩,添加具有固定 UUID 的用户 ID 设置。您的 PHP 脚本可以查找 UUID 并将其替换到 .msi 二进制文件中,然后再将其发送给用户。请参阅下面的代码片段MST变换
- 通过自定义按需构建 .msi
App.config
。仅当您的网络服务器在 Windows 上运行或者您有可以执行此作业的远程 Windows 构建服务器时,此操作才有效。
MST变换
您还可以使用 MST 转换并使用与我在第 1 点中解释的相同的二进制替换技巧应用程序配置.
对于这两个选项,您可以使用 PHP 脚本,该脚本使用二进制安全函数来替换安装程序中的值并将文件作为下载发送给用户:
<?php
$userId = // TODO get userId from the session or database
$data = file_get_contents("./my-installer.msi");
// I would use UUID's for template and userId, this way the size of the installer remains the same after replace
$data = str_replace("{fe06bd4e-4bed-4954-be14-42fb79a79817}", $userId, $data);
// Return the file as download
header("Cache-Control: public"); // needed for i.e.
header('Content-Disposition: attachment; filename=my-installer.msi');
header('Content-Type: application/x-msi');
header("Content-Transfer-Encoding: Binary");
echo $data;
?>
序列号
我能想到的最后一个方法是让程序在第一次启动时询问序列号,并让您的网站为每个用户生成唯一的序列号。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)