使用 C# Winforms 而不是安装程序工具创建 Windows 安装程序
Creating a Windows installer using C# Winforms instead of Installer tool
我以前使用过 InstallAware 和 InstallShield,它们很难使用,而且当出现问题时,很难找到并解决问题。
我的问题是为什么我们不能使用使用 C# 编写的 Windows 应用程序来执行此操作。
我知道 .Net 框架可能没有安装在目标计算机上,所以我想知道为什么没有人使用过这种体系结构:
我将使用 IntallSiheld(或任何其他类似工具)创建一个简单的安装程序来安装 .Net Framework,然后提取并 运行s 我自己的 Windows 应用程序,该应用程序是我在提升模式下使用 C# 编写的。我的应用程序将 运行 一个带有后退和下一步按钮的向导,我将处理其中的所有事情(复制文件、创建和启动 Windows 服务、添加注册表值、创建防火墙扩展等)
有没有人这样做过,有什么可以阻止人们这样做的吗?
本质上:不要试图重新发明轮子。使用现有的部署工具并继续您的日常工作:-)。有许多这样的工具可用。请参阅下面的链接。
下面是长时间的、重复的沉思:
Redux:恕我直言,恕我直言,如果我可以这么说,制作你自己的安装程序软件就是在重新发明轮子恐怕绝对没有任何收获。我相信当您创建自己的安装程序软件并发现 软件可以快速制作,但很难制作时,我相信您会“重新发现”其他人发现的复杂性,这些人已经走过了涉及部署的道路完美。在此过程中,您将花费大量精力试图将事情结束 - 并且“最后一米很长”因为您诅咒自己处理占用您的琐事以其他方式支付账单为代价的时间。为任何技术特性找出任何工具包中的错误,可能需要数年甚至数十年的时间。不,我没有弥补。这是所有部署软件供应商都要处理的问题。
许多现有工具:有许多现有工具已经实现了这种部署功能——它们不是基于Windows 安装程序(Inno Setup、NSIS、DeployMaster 和许多其他鲜为人知的工作):
- There is a list of non-MSI installer software here.
- There is another list of MSI-capable software here.
我的 2 美分 - 如果您不喜欢 MSI,请选择一种免费的非 MSI 部署工具。 How to create windows installer.
企业部署:真正重要的一点(对我来说)是企业部署依靠标准化的打包格式(例如 MSI)来允许 可靠的远程管理 您的软件部署。制作您自己的安装程序不会打动任何系统管理员或公司部署专家(至少在您解决多年的错误和缺陷之前)。 他们想要他们知道如何处理的标准化格式(这并不意味着他们对现有的部署技术印象深刻)。 使用标准化的部署格式进行部署可以获得公司对软件的认可。如果你制作了一种奇怪的部署格式,它在安装时做了一些不寻常的事情,无法轻易捕获和大规模部署你的软件,那么任何大公司都会抢先一步。没有怜悯 - 真的。这些都是繁忙的环境,您将很难理解您不寻常的解决方案。
“文件推送者”:我们这些以推送文件为生的人 要知道,部署领域充斥着愚蠢的问题,这些问题会迅速扼杀您在其他工作中的生产力——那些让您在您的领域中脱颖而出的工作——您的日常工作。部署是一项高调低地位的工作 - 我们没有抱怨。它就是这样:一种比你想象的更难处理的必需品。我的结论是更明智地度过你的时间。
复杂性:也许浏览一下“部署的复杂性[=157=”部分]”这里:Windows Installer and the creation of WiX. It is astonishing to deal with all the silly bugs that happen in deployment. It is not just a file copy, though it might be easy to think it is. And if it happens to be just a file copy, then there are existing tools that do the job. Free ones too. See links above. And if you think deployment is only file-copy in general, then please skim this list of tasks a deployment task should be capable of supporting: What is the benefit and real purpose of program installation?
您自己开发的软件包可以处理以下问题吗? (只是一些 运行dom 想法)
- 韩国受恶意软件感染的终端服务器 PC 的路径中包含 Unicode 字符?
- 符号链接和 NTFS 连接点路径?
- 笔记本电脑因为没电而在文件复制过程中自行关闭?
- 磁盘不足space情况?磁盘错误怎么办?复制超时?
- 重启要求如何?对于正在使用的文件或其他一些原因。如何处理?如果系统处于重启挂起状态并且您需要在开始安装之前检测它怎么办?
- 您将如何可靠地安装、配置以及启动和停止服务?
- 您将如何支持应用程序的卸载和清理?
- 将您的未知、无法识别、非标准软件包标记为安全威胁并加以防范的安全软件?运行你将如何开始处理这个问题?您与谁联系以获得提升“公认的二进制文件”的好处?
- 非标准 NTFS 许可 (ACL) 和 NT 权限?当你的权限被拒绝时,你如何检测它并优雅地降级? (无论出于何种原因)。
- 为您的应用程序工作部署必要的运行时? (以前很多人都做过)。如果您的嵌入式运行时已过时,是否下载最新的运行时?等等...
- 提供从安装二进制文件中提取文件的标准化方法?
- 为尝试使用您的安装二进制文件的用户提供帮助和支持?
- 等等...这只是一个 运行dom 列表,包含快速想到的任何内容。明显有很多问题。
这对于您的要求有点过头了,但不要误以为部署是您可以在几个小时内找出解决方案的事情。绝对不要接受承诺会这样做的工作——如果这是你被问到的。只是我的两分钱。
以上问题以及许多其他问题是人们发现他们在创建部署软件时必须处理的问题——除了最琐碎的部署之外的所有问题。不要浪费你的时间 - 使用一些成熟的工具.
T运行saction:如果你在一家公司工作并且只需要你的文件给你的测试人员,你可以为此使用批处理文件进行部署 - 如果您愿意的话。但是你必须支持它,我猜运行tee你会占用你很多时间。当批处理文件由于网络错误中途失败,而您的测试人员正在测试不一致的文件时,您会怎么做?未来的部署技术可能更适合此类轻量级任务。 也许部署工具最大的特点就是报告部署是否成功完成,并记录错误并在出现故障时将机器回滚到稳定状态。 Windows 安装程序为您做了很多这样的工作。
分发:很多人觉得他们可以“只是复制我的构建文件夹到用户的计算机”。这里涉及的复杂性很多。涉及网络,网络永远不能被认为是可靠的,你需要大量的错误处理。然后是t运行sactions的问题:你知道什么时候计算机处于稳定状态并且应该停止复制。您多久复制一次,仅按需复制?你如何处理少数复制失败的计算机。你怎么告诉用户? 这些是分发问题。公司拥有 SCCM 等庞大的工具来处理所有这些错误情况。尝试重新实施所有这些检查、日志记录和功能将花费很长时间。 最终您将重新创建一个现有的分发系统。完整的循环。当由于只有批处理文件或脚本 运行 而没有注册为已安装的产品时,您如何 清点 您的计算机?如果您开始复制大量包,您扫描每个文件多少次以确定它们是否是最新的?您想创建多少网络流量?它在哪里结束?答案:我想 t运行sactions 必须通过完整的日志记录和错误跟踪和回滚来实现。 然后你就完成了我上面提到的分发系统和支持的包格式.
这个“只是将我的构建文件夹复制给我的用户”的想法不知何故让我想起了这个列表:https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing。不是 100% 匹配,但这些问题让人想起。当涉及网络时,事情开始变得非常不可预测,您需要日志记录、错误控制、t运行sactions、回滚、网络通信等……我们重新发现了大规模部署——它就是野兽.
网络: 假设您想复制您的构建文件夹到10000 台台式计算机 在您的企业中。你如何开始复制? 当文件复制像 DDOS 攻击 一样接管整个网络时,您是否立即开始所有复制并关闭银行的交易大厅? 抱歉- 它正在失控 - 请原谅我的疯狂 - 但令人沮丧的是,这种复制方法被认为对于使用当前技术方法的大规模部署是可行的。内置 Windows 功能可能会有所帮助,但仍需要进行适当的测试。你需要scheduling
、queuing
、caching
、regional distribution shares
、logging
、reporting / inventory
,天知道打包/部署系统还能提供什么你已。重新实现它将是一个痛苦的过程,需要处理 b运行d 个新错误。
也许有一天我们会看到基于自动包生成的自动输出文件夹复制,它真正通过智能和 t运行sacted 分发系统工作。许多企业团队正在尝试,通过使用现有工具,他们更接近于使用标准包格式。我想当前的云部署系统正朝着这个方向发展,提供在线存储库和简单的交互式安装,但我们仍然需要智能地打包我们的软件。看看云时代的包装和分发的未来会怎样,会带来什么新问题,这将是一件很有趣的事情。
当我们按需直接从在线存储库中提取文件时,我们会看到一堆新问题吗?恶意软件、欺骗和注入? (已经有问题,但可能会变得更糟)。远程文件在没有警告的情况下被删除(以摆脱不应再使用的易受攻击的版本 - 让用户 st运行ded)?证书和签名问题?防火墙和代理问题?带有不幸错误的自动魔术更新会立即出乎意料地袭击所有人吗? the fallacies of the network and other factors 与上面的链接一样。打败我。我们拭目以待。
好的,它像往常一样变成了 运行t - 最后一段因猜测而过时(一些问题已经适用于当前部署)。对于那个很抱歉。但是,我唯一的建议是尝试获得管理层的批准以使用现有的打包和部署解决方案。
链接:
Stefan Kruger 的 Installsite.org 推特提要:https://twitter.com/installsite
选择部署工具:
- How to create windows installer
- What installation product to use? InstallShield, WiX, Wise, Advanced Installer, etc
- Windows Installer and the creation of WiX
- WiX quick start tips
我以前使用过 InstallAware 和 InstallShield,它们很难使用,而且当出现问题时,很难找到并解决问题。
我的问题是为什么我们不能使用使用 C# 编写的 Windows 应用程序来执行此操作。 我知道 .Net 框架可能没有安装在目标计算机上,所以我想知道为什么没有人使用过这种体系结构: 我将使用 IntallSiheld(或任何其他类似工具)创建一个简单的安装程序来安装 .Net Framework,然后提取并 运行s 我自己的 Windows 应用程序,该应用程序是我在提升模式下使用 C# 编写的。我的应用程序将 运行 一个带有后退和下一步按钮的向导,我将处理其中的所有事情(复制文件、创建和启动 Windows 服务、添加注册表值、创建防火墙扩展等) 有没有人这样做过,有什么可以阻止人们这样做的吗?
本质上:不要试图重新发明轮子。使用现有的部署工具并继续您的日常工作:-)。有许多这样的工具可用。请参阅下面的链接。
下面是长时间的、重复的沉思:
Redux:恕我直言,恕我直言,如果我可以这么说,制作你自己的安装程序软件就是在重新发明轮子恐怕绝对没有任何收获。我相信当您创建自己的安装程序软件并发现 软件可以快速制作,但很难制作时,我相信您会“重新发现”其他人发现的复杂性,这些人已经走过了涉及部署的道路完美。在此过程中,您将花费大量精力试图将事情结束 - 并且“最后一米很长”因为您诅咒自己处理占用您的琐事以其他方式支付账单为代价的时间。为任何技术特性找出任何工具包中的错误,可能需要数年甚至数十年的时间。不,我没有弥补。这是所有部署软件供应商都要处理的问题。
许多现有工具:有许多现有工具已经实现了这种部署功能——它们不是基于Windows 安装程序(Inno Setup、NSIS、DeployMaster 和许多其他鲜为人知的工作):
- There is a list of non-MSI installer software here.
- There is another list of MSI-capable software here.
我的 2 美分 - 如果您不喜欢 MSI,请选择一种免费的非 MSI 部署工具。 How to create windows installer.
企业部署:真正重要的一点(对我来说)是企业部署依靠标准化的打包格式(例如 MSI)来允许 可靠的远程管理 您的软件部署。制作您自己的安装程序不会打动任何系统管理员或公司部署专家(至少在您解决多年的错误和缺陷之前)。 他们想要他们知道如何处理的标准化格式(这并不意味着他们对现有的部署技术印象深刻)。 使用标准化的部署格式进行部署可以获得公司对软件的认可。如果你制作了一种奇怪的部署格式,它在安装时做了一些不寻常的事情,无法轻易捕获和大规模部署你的软件,那么任何大公司都会抢先一步。没有怜悯 - 真的。这些都是繁忙的环境,您将很难理解您不寻常的解决方案。
“文件推送者”:我们这些以推送文件为生的人 要知道,部署领域充斥着愚蠢的问题,这些问题会迅速扼杀您在其他工作中的生产力——那些让您在您的领域中脱颖而出的工作——您的日常工作。部署是一项高调低地位的工作 - 我们没有抱怨。它就是这样:一种比你想象的更难处理的必需品。我的结论是更明智地度过你的时间。
复杂性:也许浏览一下“部署的复杂性[=157=”部分]”这里:Windows Installer and the creation of WiX. It is astonishing to deal with all the silly bugs that happen in deployment. It is not just a file copy, though it might be easy to think it is. And if it happens to be just a file copy, then there are existing tools that do the job. Free ones too. See links above. And if you think deployment is only file-copy in general, then please skim this list of tasks a deployment task should be capable of supporting: What is the benefit and real purpose of program installation?
您自己开发的软件包可以处理以下问题吗? (只是一些 运行dom 想法)
- 韩国受恶意软件感染的终端服务器 PC 的路径中包含 Unicode 字符?
- 符号链接和 NTFS 连接点路径?
- 笔记本电脑因为没电而在文件复制过程中自行关闭?
- 磁盘不足space情况?磁盘错误怎么办?复制超时?
- 重启要求如何?对于正在使用的文件或其他一些原因。如何处理?如果系统处于重启挂起状态并且您需要在开始安装之前检测它怎么办?
- 您将如何可靠地安装、配置以及启动和停止服务?
- 您将如何支持应用程序的卸载和清理?
- 将您的未知、无法识别、非标准软件包标记为安全威胁并加以防范的安全软件?运行你将如何开始处理这个问题?您与谁联系以获得提升“公认的二进制文件”的好处?
- 非标准 NTFS 许可 (ACL) 和 NT 权限?当你的权限被拒绝时,你如何检测它并优雅地降级? (无论出于何种原因)。
- 为您的应用程序工作部署必要的运行时? (以前很多人都做过)。如果您的嵌入式运行时已过时,是否下载最新的运行时?等等...
- 提供从安装二进制文件中提取文件的标准化方法?
- 为尝试使用您的安装二进制文件的用户提供帮助和支持?
- 等等...这只是一个 运行dom 列表,包含快速想到的任何内容。明显有很多问题。
这对于您的要求有点过头了,但不要误以为部署是您可以在几个小时内找出解决方案的事情。绝对不要接受承诺会这样做的工作——如果这是你被问到的。只是我的两分钱。
以上问题以及许多其他问题是人们发现他们在创建部署软件时必须处理的问题——除了最琐碎的部署之外的所有问题。不要浪费你的时间 - 使用一些成熟的工具.
T运行saction:如果你在一家公司工作并且只需要你的文件给你的测试人员,你可以为此使用批处理文件进行部署 - 如果您愿意的话。但是你必须支持它,我猜运行tee你会占用你很多时间。当批处理文件由于网络错误中途失败,而您的测试人员正在测试不一致的文件时,您会怎么做?未来的部署技术可能更适合此类轻量级任务。 也许部署工具最大的特点就是报告部署是否成功完成,并记录错误并在出现故障时将机器回滚到稳定状态。 Windows 安装程序为您做了很多这样的工作。
分发:很多人觉得他们可以“只是复制我的构建文件夹到用户的计算机”。这里涉及的复杂性很多。涉及网络,网络永远不能被认为是可靠的,你需要大量的错误处理。然后是t运行sactions的问题:你知道什么时候计算机处于稳定状态并且应该停止复制。您多久复制一次,仅按需复制?你如何处理少数复制失败的计算机。你怎么告诉用户? 这些是分发问题。公司拥有 SCCM 等庞大的工具来处理所有这些错误情况。尝试重新实施所有这些检查、日志记录和功能将花费很长时间。 最终您将重新创建一个现有的分发系统。完整的循环。当由于只有批处理文件或脚本 运行 而没有注册为已安装的产品时,您如何 清点 您的计算机?如果您开始复制大量包,您扫描每个文件多少次以确定它们是否是最新的?您想创建多少网络流量?它在哪里结束?答案:我想 t运行sactions 必须通过完整的日志记录和错误跟踪和回滚来实现。 然后你就完成了我上面提到的分发系统和支持的包格式.
这个“只是将我的构建文件夹复制给我的用户”的想法不知何故让我想起了这个列表:https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing。不是 100% 匹配,但这些问题让人想起。当涉及网络时,事情开始变得非常不可预测,您需要日志记录、错误控制、t运行sactions、回滚、网络通信等……我们重新发现了大规模部署——它就是野兽.
网络: 假设您想复制您的构建文件夹到10000 台台式计算机 在您的企业中。你如何开始复制? 当文件复制像 DDOS 攻击 一样接管整个网络时,您是否立即开始所有复制并关闭银行的交易大厅? 抱歉- 它正在失控 - 请原谅我的疯狂 - 但令人沮丧的是,这种复制方法被认为对于使用当前技术方法的大规模部署是可行的。内置 Windows 功能可能会有所帮助,但仍需要进行适当的测试。你需要scheduling
、queuing
、caching
、regional distribution shares
、logging
、reporting / inventory
,天知道打包/部署系统还能提供什么你已。重新实现它将是一个痛苦的过程,需要处理 b运行d 个新错误。
也许有一天我们会看到基于自动包生成的自动输出文件夹复制,它真正通过智能和 t运行sacted 分发系统工作。许多企业团队正在尝试,通过使用现有工具,他们更接近于使用标准包格式。我想当前的云部署系统正朝着这个方向发展,提供在线存储库和简单的交互式安装,但我们仍然需要智能地打包我们的软件。看看云时代的包装和分发的未来会怎样,会带来什么新问题,这将是一件很有趣的事情。
当我们按需直接从在线存储库中提取文件时,我们会看到一堆新问题吗?恶意软件、欺骗和注入? (已经有问题,但可能会变得更糟)。远程文件在没有警告的情况下被删除(以摆脱不应再使用的易受攻击的版本 - 让用户 st运行ded)?证书和签名问题?防火墙和代理问题?带有不幸错误的自动魔术更新会立即出乎意料地袭击所有人吗? the fallacies of the network and other factors 与上面的链接一样。打败我。我们拭目以待。
好的,它像往常一样变成了 运行t - 最后一段因猜测而过时(一些问题已经适用于当前部署)。对于那个很抱歉。但是,我唯一的建议是尝试获得管理层的批准以使用现有的打包和部署解决方案。
链接:
Stefan Kruger 的 Installsite.org 推特提要:https://twitter.com/installsite
选择部署工具:
- How to create windows installer
- What installation product to use? InstallShield, WiX, Wise, Advanced Installer, etc
- Windows Installer and the creation of WiX
- WiX quick start tips