65.9K
CodeProject 正在变化。 阅读更多。
Home

dotNetInstaller - .NET 应用程序的安装引导程序

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.96/5 (84投票s)

2003年10月2日

MIT

22分钟阅读

viewsIcon

1107961

downloadIcon

2225

通过此工具,开发人员可以定义应用程序的先决条件,并根据用户操作系统类型和语言以正确的顺序安装这些组件的正确版本,允许用户从网络下载这些组件或直接安装这些组件。

Sample Image - maximum width is 600 pixels

引言

此应用程序不替代InstallShield、Wise或Visual Studio安装和部署项目等工具;我的目标是创建一个应用程序来帮助用户安装正确的先决条件组件。如今,应用程序通常需要安装多个组件才能正常工作:Windows Service Pack、Internet Explorer、MDAC、.NET Framework等。通过此工具,开发人员可以定义应用程序的先决条件,并根据用户操作系统类型和语言以正确的顺序安装这些组件的正确版本,允许用户从网络下载这些组件或直接从其媒体(通常是CD-ROM)安装这些组件。

此项目由以下组件组成

  • dotNetInstaller.exe + 源代码:主引导程序应用程序,使用Visual Studio 2003 C++和MFC编写。
  • InstallerEditor.exe + 源代码:用于编辑配置文件和编辑dotNetInstaller.exe资源的应用程序,使用Visual Studio 2003 C#编写。
  • 配置示例和SupportFiles模板。

此项目基于Microsoft引导程序和Kevin Moore的引导程序“增强型.NET引导程序安装”(https://codeproject.org.cn/managedcpp/dotnetsetup.asp)。

所有设置都存储在一个XML文件中,该文件由Cho, Kyung-min使用一个小型XML解析器进行解析(XMLite:简单XML解析器。https://codeproject.org.cn/useritems/xmlite.asp

特别感谢Kevin Moore和Cho, Kyung-min的工作。

我使用Windows XP、Visual Studio 2003(C++和C#)和Microsoft .NET Framework 1.1构建了此项目。请在此处查看最新版本:http://dotnetinstaller.codeplex.com/

编辑器:InstallerEditor.exe

您可以使用编辑器创建两种类型的配置文件

  • 独立配置:从指定路径运行组件设置的配置,通常是dotNetInstaller.exe文件的相对路径。如果您想通过CD-ROM分发您的应用程序,请选择此配置。
  • Web配置:从指定网站下载并执行所需组件的配置。如果您想通过网络分发配置,请选择此配置。

您可以使用编辑器创建这些配置文件,然后将这些文件包含在dotNetInstaller资源中。通过此解决方案,您只能分发一个exe文件。

另一种解决方案是在dotNetInstaller.exe的相同路径下分发名为“configuration.xml”的配置文件,如果您愿意,还可以分发名为“banner.bmp”的位图。dotNetInstaller首先检查此配置文件,如果该文件不存在,则应用程序使用嵌入到exe中的配置。

在XML配置文件中,您可以在所有命令或路径设置中使用一些路径变量。建议在所有包含一个或多个空格的command属性中使用“符号,在msi组件中不支持“符号,如果需要,应用程序会自动添加此符号。建议在所有带有路径值的属性(如command, dialog_bitmap, package)中使用#APPPATH变量,此常量允许从dotNetInstaller.exe文件夹写入相对路径字符串,否则所有路径都相对于系统当前目录。

如果您配置应用程序下载组件,我建议使用#TEMPPATH变量下载组件,并从相同路径运行组件。

例如,如果您想在dotNetInstaller.exe的相同文件夹中启动一个文件('My App.exe'),您可以在命令字符串中写入:“#APPPATH\My App.exe”

在此版本中,您无法从编辑器更改组件的顺序,如果需要此功能,您必须手动更改XML。

教程

如何创建独立安装程序以安装.NET Framework和您的MSI安装程序

我们创建一个CD-ROM,其中包含您的MSI包、支持文件(如.NET Framework)、配置文件(configuration.xml)和位图(banner.bmp)。所有这些组件都直接从CD-ROM安装。

  1. 创建一个代表您的最终分发CD-ROM的文件夹,例如“c:\MyRelease\”。
  2. 将项目.zip中的“SupportFiles”目录复制到“c:\MyRelease\”下。
  3. 在SupportFiles中,将所有readme.txt文件替换为您的安装所需的实际组件文件;例如,将“SupportFiles\dotNet\v1.1\English\dotnetfx.exe.readme.txt”替换为您从微软网站下载的实际dotnetfx.exe文件。
  4. 将您的MSI包(您可以使用Visual Studio .NET、InstallShield或其他安装工具创建)复制到“c:\MyRelease\”下。
  5. 将dotNetInstaller.exe复制到“c:\MyRelease\”下。
  6. 创建一个位图(banner.bmp 110x208像素),名称为“c:\MyRelease\banner.bmp”,带有您的应用程序徽标。
  7. 执行InstallerEditor.exe文件。
  8. 选择菜单“文件”->“新建...”并创建一个名为“c:\MyRelease\configuration.xml”的新文件。
  9. 从菜单“工具”->“新项目的语言”中选择您想要的用户界面语言。(目前只有英语和意大利语,但您可以通过手动编辑属性来编写自定义消息。)
  10. 右键单击“Config File”节点并选择“Add”->“Setup Configuration”
  11. 选择刚创建的“install:”节点并使用您的应用程序名称自定义属性“dialog_caption”、“dialog_message”和“installation_completed”。
  12. 右键单击“install:”节点并选择“Add”->“Component Wizard...”
  13. 选择“Microsoft .NET Framework 1.1”、“Distributed with dotNetInstaller”并单击“OK”按钮。
  14. 右键单击“install:”节点并选择“Add”->“Msi Component”
  15. 选择刚创建的节点并使用您的安装程序和MSI包名称自定义属性“description”、“installmessage”和“package”。在包路径中,我使用#APPPATH变量,它代表dotNetInstaller.exe路径。
  16. 选择菜单“文件”->“保存”。
  17. 将“c:\MyRelease\”目录中的所有内容写入您的CD-ROM。如果您愿意,还可以创建一个“autorun.inf”文件来执行dotNetInstaller.exe。

有关其他信息,在.zip中您可以找到一个configuration.xml文件的示例,该文件配置为在Windows 98、98 SE、Millennium、NT4、2000、XP、2003上安装这些组件

  • 安装.NET Framework、MDAC和Internet Explorer所需的Windows Service Pack(Windows 2000 Sp4、Windows NT 4 Sp6a、Windows 98的Year 2000更新)
  • Internet Explorer 6 Sp1
  • .NET Framework 1.1
  • Microsoft 数据访问组件 2.7 (MDAC 2.7)
  • Microsoft JET 4.0 Service Pack 6
  • 示例应用程序

我包含了一个SupportFiles目录,其中包含所需的结构和一些readme.txt文件,您可以在其中找到下载所需组件的链接(通常来自微软网站)。

如何创建Web安装程序以安装.NET Framework和您的MSI安装程序

创建支持文件目录

我们创建一个网站,其中包含您的MSI包和所有支持文件(如.NET Framework)。

  1. 创建一个代表您的最终分发网站的文件夹,例如“http://www.mysite.com/MyRelease/”。
  2. 将项目.zip中的“SupportFiles”目录复制到“http://www.mysite.com/MyRelease/”下。
  3. 在SupportFiles中,将所有readme.txt文件替换为您的安装所需的实际组件文件;例如,将“SupportFiles\dotNet\v1.1\English\dotnetfx.exe.readme.txt”替换为您从微软网站下载的实际dotnetfx.exe文件。
  4. 将您的MSI包(您可以使用Visual Studio .NET、InstallShield或其他安装工具创建)复制到“http://www.mysite.com/MyRelease/”下。

创建主配置文件

我们创建一个配置文件,该文件从网站下载并安装组件(适用于.NET Framework和一个MSI包)。

  1. 执行InstallerEditor.exe文件。
  2. 选择菜单“文件”->“新建...”并创建一个名为“configuration.xml”的新文件。
  3. 从菜单“工具”->“新项目的语言”中选择您想要的用户界面语言。(目前只有英语和意大利语,但您可以通过手动编辑属性来编写自定义消息。)
  4. 右键单击“Config File”节点并选择“Add”->“Setup Configuration”
  5. 选择刚创建的“install:”节点并使用您的应用程序名称自定义属性“dialog_caption”、“dialog_message”和“installation_completed”。
  6. 右键单击“install:”节点并选择“Add”->“Component Wizard...”
  7. 选择“Microsoft .NET Framework 1.1”、“从Internet下载”,并将“http://www.myWebSite.com/MyApp/SupportFiles”替换为您的网站,例如“http://www.mysite.com/MyRelease/SupportFiles”,然后单击“OK”按钮。
  8. 右键单击“install:”节点并选择“Add”->“Msi Component”
  9. 选择刚创建的节点并使用您的安装程序和MSI包名称自定义属性“description”、“installmessage”和“package”。将#APPPATH\mysetup.msi替换为#TEMPPATH\MyApplicationName\mysetup.msi,这是包的下载目的地。
  10. 右键单击MSI组件并选择“Add”->“Download Dialog”
  11. 选择刚创建的节点“Download Dialog”并使用您的应用程序名称自定义属性“dialog_caption”和“dialog_message”。
  12. 右键单击“Download Dialog”节点并选择“Add”->“Download File”
  13. 选择“Download Dialog”下刚创建的节点并自定义属性“componentname”、“destinationpath”(例如写入“#TEMPPATH\MyApplicationName\”,必须与“package”属性的路径相同)和“sourceurl”(写入“http://www.mysite.com/MyRelease/mysetup.msi”)。
  14. 选择菜单“文件”->“保存”,并将此configuration.xml文件复制到“http://www.mysite.com/MyRelease/”下。

创建引导程序

我们创建一个可执行文件,该文件从网站下载并执行主配置文件,用我们的自定义XML和位图更改dotNetInstaller资源。

  1. 创建一个位图(banner.bmp 110x208像素),带有您的应用程序徽标。
  2. 执行InstallerEditor.exe文件。
  3. 选择菜单“文件”->“新建...”并创建一个名为“reference.xml”的新文件。
  4. 从菜单“工具”->“新项目的语言”中选择您想要的用户界面语言。(目前只有英语和意大利语,但您可以通过手动编辑属性来编写自定义消息。)
  5. 右键单击“Config File”节点并选择“Add”->“Web Configuration”
  6. 选择刚创建的节点“reference:”,并自定义属性“referencefile”,例如写入“#TEMPPATH\MyApplicationName\configuration.xml”。
  7. 选择“reference:”下的“Download Dialog”节点,并自定义属性“dialog_caption”和“dialog_message”。
  8. 右键单击“Download Dialog”节点并选择“Add”->“Download File”
  9. 选择“Download Dialog”下刚创建的节点,并自定义属性“componentname”、“destinationpath”(例如写入“#TEMPPATH\MyApplicationName\”,必须与“referencefile”属性的路径相同)和“sourceurl”(写入“http://www.mysite.com/MyRelease/configuration.xml”,必须是您可以下载之前创建的配置文件的URL)。
  10. 选择菜单“文件”->“保存”。
  11. 选择菜单“文件”->“创建Exe”;在“Template dotNetInstaller.exe file”中选择您的“dotNetInstaller.exe”路径,在“Banner Bitmap”中选择之前创建的位图。单击“Make”按钮,然后选择新dotNetInstaller的文件名,例如“MyWebSetup.exe”。
  12. 将“MyWebSetup.exe”复制到“http://www.mysite.com/MyRelease/”下。

现在用户只需下载“MyWebSetup.exe”(310 Kb),此应用程序将自动下载并安装所需的组件,在此示例中为.NET Framework和一个MSI包。

路径变量

这些是可以在所有包含路径的属性(dialog_bitmap, command, ...)中使用的变量。
  • #APPPATH - 此字符串将替换为dotNetInstaller.exe程序的目录。
  • #SYSTEMPATH - 此字符串将替换为Windows系统目录(使用GetSystemDirectory() API,通常为c:\WINNT\System32)。
  • #WINDOWSPATH - 此字符串将替换为Windows目录(使用GetWindowsDirectory() API,通常为c:\WINNT)。
  • #TEMPPATH - 此字符串将替换为临时目录(使用GetTempPath() API,通常为C:\Documents and Settings\[User]\Local Settings\Temp)。

检查组件是否已安装

您可以使用installedcheck元素来检查组件是否已安装,例如,您可以通过读取此注册表项SOFTWARE\Microsoft\NET Framework Setup\NDP\v1.1.4322\Install = 1来检查.NET Framework 1.1是否已安装。

目前有两种类型的安装检查

  • “check_registry_value” - 检查特定的注册表值。
  • “check_file” - 检查特定文件和特定版本。
在检查注册表值或文件版本时,有两种比较类型:“match”(检查是否存在确切的值)或“version”(检查版本是否大于或等于)。

您可以查看示例以了解最常见组件(.NET Framework、Internet Explorer、MDAC、JET等)使用的检查。

检查操作系统版本

这是用于仅在特定操作系统版本中安装组件的操作系统表。

操作系统名称 枚举 数字标识符
无效 winNotValid 0
Windows 95 win95 5
Windows 95 OSR2 win95osr2 10
Windows 98 win98 15
Windows 98 第二版 win98se 20
Windows Millennium winME 25
Windows NT4 winNT4 30
Windows NT4 Service Pack 6 winNT4sp6 35
Windows NT4 Service Pack 6a winNT4sp6a 40
Windows 2000 win2000 45
Windows 2000 Service Pack 1 win2000sp1 50
Windows 2000 Service Pack 2 win2000sp2 55
Windows 2000 Service Pack 3 win2000sp3 60
Windows 2000 Service Pack 4 win2000sp4 65
Windows XP winXP 75
Windows XP Service Pack 1 winXPsp1 80
Windows Server 2003 winServer2003 90
下一步.... winLater 100

一些例子

  • 仅在Windows XP(不带Service Pack检查)中安装组件:os_filter_greater='74',os_filter_smaller='90'。
  • 仅在Windows 2000或更高版本中安装组件:os_filter_greater='44',os_filter_smaller=''。
  • 仅在Windows 98(不在Windows 98 SE中)中安装组件:os_filter_greater='14',os_filter_smaller='16'。
  • 始终安装组件:os_filter_greater='',os_filter_smaller=''。

通常最好使用安装检查来查看组件是否已安装,但对于某些组件,需要检查操作系统版本(尤其是Service Pack或Windows更新)。

XML元素帮助

警告:XML解析器不完全兼容标准XML规范;它只支持基本功能。不要包含XML注释,并使用正常的XML语法,如.zip中提供的示例。建议使用编辑器InstallerEditor创建或修改您的配置文件,或者我建议使用普通文本编辑器。如果您想手动在XML中插入“字符,您必须写入"。

配置
根元素
属性
子元素
配置

配置 (type='install')
用于安装组件集合的配置。
属性
type 'install' - 配置类型。可以是“install”或“reference”。
lcid 一个过滤器,用于仅在指定LCID相等或不等于的所有操作系统语言上安装此配置(参见帮助->LCID表)。用逗号(',')分隔多个LCID,并使用非符号('!')表示NOT逻辑('1044,1033,!1038')。您还可以过滤指定的组件。
dialog_caption 主对话框标题。
dialog_message 主对话框的主消息。
dialog_bitmap 主对话框左侧面板中使用的位图文件。如果此文件不存在或此属性为空,则应用程序从.exe资源加载位图。可以包含路径常量(参见帮助->路径常量)。
install_caption “安装”按钮的标题。
cancel_caption “取消”按钮的标题。
reinstallflag_caption “重新安装所有”复选框的标题。
status_installed 用于指示已安装组件的字符串。
status_notinstalled 用于指示未安装组件的字符串。
failed_exec_command_continue 当组件无法安装并询问应用程序是否可以继续安装其他组件时使用的消息(是/否消息)。必须包含一个“%s”字符串,应用程序在此处放置组件的描述。
installation_completed 安装完成消息。
dialog_install_next “下一步”按钮的标题。
dialog_install_skip “跳过”按钮的标题。
installing_component_wait 安装组件时使用的消息。必须包含一个“%s”字符串,应用程序在此处放置组件的描述。
reboot_required 当应用程序需要重新启动并询问是否立即重新启动时使用的消息(是/否消息)。
子元素
components

配置 (type='reference')
用于从特定URL下载配置文件的配置。
属性
type 'reference' - 配置类型。可以是“install”或“reference”。
lcid 一个过滤器,用于仅在指定LCID相等或不等于的所有操作系统语言上安装此配置(参见帮助->LCID表)。用逗号(',')分隔多个LCID,并使用非符号('!')表示NOT逻辑('1044,1033,!1038')。您还可以过滤所有配置元素。如果为空,则不应用过滤器。
子元素
下载对话框
配置文件

配置文件
下载的配置文件的路径。
属性
文件名 应用程序可以找到配置的配置文件。通常是下载组件的目标目录。可以包含路径常量(参见帮助->路径常量)。
子元素

components
类型为“component”的元素集合。
属性
子元素
组件

组件(另请参见基于“type”属性的特定帮助)
要安装的组件。
属性
type 组件类型;可以是“cmd”用于执行通用命令行安装,或“msi”用于安装Windows Installer MSI包,或“openfile”用于打开文件。每种类型都有自己的属性。
os_filter_greater 一个过滤器,用于仅在所有操作系统ID大于指定ID的操作系统上安装此组件(参见帮助->操作系统表)。例如,要在Windows 2000或更高版本中安装组件,请写入“44”。
os_filter_smaller 一个过滤器,用于仅在所有操作系统ID小于指定ID的操作系统上安装此组件(参见操作系统表)。例如,要在Windows 2000之前的版本中安装组件,请写入“45”。
os_filter_lcid 一个过滤器,用于仅在指定LCID相等或不等于的所有操作系统语言上安装此组件(参见帮助->LCID表)。用逗号(',')分隔多个LCID,并使用非符号('!')表示NOT逻辑('1044,1033,!1038')。您还可以过滤所有配置元素。
installcompletemessage 组件成功安装后使用的消息。要禁用此消息,请将此属性留空。
mustreboot 指示此组件成功安装后是否要求重新启动(True/False)。通常,如果系统必须重新启动,则是组件自动(通过特殊返回码)告诉此安装程序停止并重新启动系统,但在特殊情况下(例如在Windows 98中),我们必须强制重新启动才能正确安装某些组件(例如.NET Framework)。
description 此组件的描述。此值也用于某些消息中以替换%s字符串。
安装消息 用于确认此组件安装的消息。
注意 注意,安装程序不使用。
子元素
已安装检查
下载对话框

组件 (type='cmd')
可用于执行.exe文件(如安装应用程序)的组件。
属性
另请参见“component”元素
type 'cmd'
command 指定安装此组件时要执行的命令。必须是“CreateProcess”API的有效命令。可以包含“字符和路径常量(参见帮助->路径常量)。
子元素

组件 (type='msi')
可用于安装msi包的组件。
属性
另请参见“component”元素
type 'msi'
指定安装此组件时要执行的msi包的路径。可以包含路径常量(参见帮助->路径常量)。
cmdparameters 指定msiexec程序的命令行参数。可以包含“字符和路径常量(参见帮助->路径常量)。有关可与Windows Installer一起使用的命令行,请参见MSDN。
子元素

组件 (type='openfile')
可用于在安装过程中打开网页、readme文件或执行任何文件的组件。
属性
另请参见“component”元素
type 'openfile'
文件 指定安装此组件时要打开的文件。必须是“ShellExecute”API的有效命令。可以包含“字符和路径常量(参见帮助->路径常量)。例如,可以是互联网链接。
子元素

下载对话框
表示要下载的文件列表和下载对话框的配置。
属性
dialog_caption 下载对话框的标题。
dialog_message 用户按下“开始”按钮之前,下载对话框中出现的初始消息。
autostartdownload True表示无需用户交互即可开始下载,False表示让用户按下“开始”按钮。
dialog_message_downloading 下载过程开始时下载对话框中显示的消息。
buttonstart_caption “开始”按钮的标题。
buttoncancel_caption “取消”按钮的标题。
子元素
下载

下载
类型为“download”的元素集合。
属性
子元素
下载

下载
表示要下载的单个文件。
属性
组件名称 要下载的文件的描述。
sourceurl 要下载的文件的完整源路径。例如“http://www.yourwebsite.com/ SetupX/Setup.exe”。必须是带有http://或ftp://协议的URL。
destinationpath 应用程序复制sourceurl文件的完整目标路径。建议使用TEMP路径作为目标,例如“#TEMPPATH\\APPLICATION_NAME”。可以包含路径常量(参见帮助->路径常量)。
destinationfilename 下载文件的新名称。将此值留空以使用原始文件名。
子元素

installedcheck (type='check_file')
应用程序通过查找指定的注册表信息或文件来检查组件是否已安装。
属性
type 'check_file' - 检查类型,可以是“check_registry_value”用于检查注册表中的特定值,或“check_file”用于检查特定文件。
文件名 指定要搜索的文件,如果应用程序找不到指定的文件,则必须安装该组件。此属性可以包含路径常量(参见帮助->路径常量)。
文件版本 文件的版本,可用于根据比较属性执行版本检查。如果为空,则应用程序仅检查文件的存在。
比较 比较模式,可以是“match”用于检查是否存在文件的确切版本,或“version”用于比较版本是否相等或更大。
子元素

installedcheck (type='check_registry_value')
应用程序通过查找指定的注册表信息或文件来检查组件是否已安装。
属性
type 'check_registry_value' - 检查类型,可以是“check_registry_value”用于检查注册表中的特定值,或“check_file”用于检查特定文件。
路径 指定要搜索指定注册表值的注册表路径,必须是HKEY_LOCAL_MACHINE下的路径,例如“SOFTWARE\\MyCompany”。
fieldname 指定路径中的注册表字段名称,例如“Installed”。
fieldvalue 用于检查组件是否已安装的注册表值,此值根据指定的值类型进行转换。
fieldtype 指定注册表字段的类型,可以是“REG_DWORD”(用于数值)或“REG_SZ”(用于字符串值)。
比较 比较模式;可以是“match”用于检查注册表中是否存在确切的值,或“version”用于将注册表版本与指定版本进行比较,如果注册表版本等于或大于指定版本,则返回true。
子元素

注释

  • 如果组件需要重新启动系统,应用程序会自动在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run中添加一个键,以便在下次启动时重新加载应用程序。
  • 您必须以管理员权限运行此应用程序。
  • 我已在Windows 98、98 SE、Millennium、2000、XP上测试过此安装程序。(尚未在Windows NT 4和Terminal Server上测试)。
  • 您的安装程序也写入一个小的注册表值,您可以在其中放置一些关于已安装版本的信息,这允许此应用程序使用“installedcheck”元素检查您的安装程序是否已安装。
  • .NET Framework 1.1(dotNetFx.exe)的安装程序会自动安装Windows Installer 2.0。
  • 要在Windows 98中安装MDAC 2.7,您必须首先安装Year 2000兼容性更新。在我的示例配置文件中,我为此文件添加了一个组件,您可以从Windows Update Catalog网站下载这些更新。
  • 在Windows Millennium中,如果我将dotNetInstaller.exe重命名为Setup.exe,我遇到了一些奇怪的问题。如果我启动Setup.exe,我无法再检测到正确的操作系统版本(返回Windows 98版本而不是Windows Millennium)。无论如何,您所要做的就是将可执行文件名称保留为dotNetInstaller.exe或使用与Setup.exe不同的名称。
  • 我发现检查JET 4.0是否已安装的唯一方法是在系统目录中搜索版本为4.0.7328.0的Msjet40.dll文件(JET 4.0 Sp7)。
  • 您还可以使用此项目同时启动多个MSI或其他安装程序,也可以用于非.NET项目(如Visual Basic、VC++等)。
  • 在Windows Millennium中,如果我将dotNetInstaller.exe重命名为Setup.exe,我遇到了一些奇怪的问题。如果我启动Setup.exe,我无法再检测到正确的操作系统版本(返回Windows 98版本而不是Windows Millennium)。无论如何,您所要做的就是将可执行文件名称保留为dotNetInstaller.exe或使用与Setup.exe不同的名称。
  • 在我的配置文件中,我还添加了用于安装Service Pack和其他系统组件的组件,但请注意,安装此类组件始终是不安全的操作。
  • 要查找已安装的操作系统LCID,我使用此文章中提供的信息:Microsoft 知识库文章 - 181604. HOWTO:确定 Windows 95 或 WinNT 的默认语言 ID
  • 要下载组件,我使用URLDownloadToFile API。
  • 目前我不删除下载的组件,因此我建议将TEMP路径用作目标文件夹。
  • 为了更改exe文件的资源,我使用BeginUpdateResourceWUpdateResourceWEndUpdateResourceW API。这些API仅在Windows NT、2000和XP上可用,因此编辑器不能在Windows 98上使用(引导程序也支持Windows 98)。

未来工作总结

  • 静默模式和命令行支持。

历史

1.1.0.2(2004年1月2日)

  • 增加了从网络下载所需组件的功能。
  • 添加了#TEMPPATH路径变量。
  • 用于创建和修改XML配置文件的编辑器。
  • XML结构进行了许多更改,旧文件不兼容。
  • 修复了读取操作系统LCID函数中的一个bug和其他一些小bug。

1.0.8.0(2003年11月5日)

  • 添加了#WINDOWSPATH路径常量。

1.0.7.0(2003年9月28日)

  • 修复了MDAC和JET组件配置文件中的bug(注册表检查为REG_SZ和JET的语言支持)。

1.0.7.0(2003年9月27日)

  • 首次公开发布。

许可证

dotNetInstaller - 用于.NET的C++安装引导程序

版权所有 (c) 2003, Davide Icardi

保留所有权利。

在遵守以下条件的前提下,允许以源代码和二进制形式重新分发和使用,无论是否经过修改:

  • 源代码的再分发必须保留上述版权声明、此条件列表和以下免责声明。
  • 二进制形式的再分发必须在随分发提供的文档和/或其他材料中复制上述版权声明、此条件列表和以下免责声明。
  • 未经事先明确书面许可,不得使用本组织名称或其贡献者的名称来认可或推广源自本软件的产品。

本软件由版权所有者和贡献者“按原样”提供,不作任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权的暗示保证。在任何情况下,版权所有者或贡献者均不对任何直接、间接、偶然、特殊、惩戒性或后果性损害(包括但不限于采购替代商品或服务;使用、数据或利润损失;或业务中断)承担责任,无论其成因以及基于何种责任理论,无论是合同、严格责任还是侵权(包括疏忽或其他),即使已被告知此类损害的可能性。

© . All rights reserved.