更新:2011 年 4 月
安装程序工具是一个命令行实用工具,您可以通过此工具执行指定程序集中的安装程序组件,从而安装和卸载服务器资源。 此工具与 System.Configuration.Install 命名空间中的类配合使用。
安装 Visual Studio 和 Windows SDK 时会自动安装此工具。 要运行工具,我们建议您使用 Visual Studio 命令提示符或 Windows SDK 命令提示符(也称 CMD Shell)。 您可以使用这些实用程序轻松运行工具,而不需要导航到安装文件夹。 有关更多信息,请参见 Visual Studio 和 Windows SDK 命令提示。
如果您的计算机上已安装了 Visual Studio:在任务栏上依次单击 Start、All Programs、Visual Studio、Visual Studio Tools、Visual Studio Command Prompt。
- 或 -
如果您的计算机上已安装了 Windows SDK:在任务栏上依次单击 Start、All Programs、Windows SDK 文件夹和 Command Prompt(或CMD Shell)。
在命令提示处,键入下列命令:
installutil [/u[ninstall]] [options] assembly [[options] assembly] ...
参数
参数 |
说明 |
---|---|
assembly |
在其中执行安装程序组件的程序集的文件名称。 如果您要通过使用 /AssemblyName 选项指定程序集的强名称,则忽略此参数。 |
选项
选项 |
说明 |
---|---|
/h[elp] - 或 - /? |
显示该工具的命令语法和选项。 |
/help 程序集 - 或 - /? 程序集 |
连同 InstallUtil.exe 的命令语法和选项,在指定的程序集中显示被个别安装程序所识别的其他选项。 此选项将各安装程序组件的 Installer.HelpText 属性返回的文本添加到 InstallUtil.exe 的帮助文本。 |
/AssemblyName "assemblyName ,Version=主版本号.次版本号.内部版本号.修订号 ,区域性=区域设置 ,PublicKeyToken=公钥标记" |
指定出现在全局程序集缓存中的某个程序集的强名称。 必须使用程序集的版本、区域性和公钥标记完全限定程序集名称。 完全限定名必须用引号括起。 例如,“myAssembly, Culture=neutral, PublicKeyToken=0038abc9deabfle5, Version=4.0.0.0”是完全限定的程序集名称。 |
/InstallStateDir=[目录名称] |
明确.InstallState 文件的目录,其中包含用来卸载该程序集的数据。 默认为包含程序集的目录。 |
/LogFile=[filename] |
指定在其中记录安装进度的日志文件的名称。 默认情况下,如果省略 /LogFile 选项,则会创建名为 assemblyname.InstallLog 的日志文件。 如果文件名被省略,则不生成任何日志文件。 |
/LogToConsole={true|false} |
如为 true,则会将输出显示到控制台。 如果为 false(默认值),则取消将输出显示到控制台。 |
/ShowCallStack |
如果在安装过程中的任何时候出现异常,则将调用堆栈输出到日志文件。 |
/u[ninstall] |
卸载指定的程序集。 与其他选项不同,/u 应用于所有程序集,不论该选项出现在命令行的什么位置。 |
其他安装程序选项
程序集中使用的独立安装程序可识别除 选项 部分中列出的选项之外的选项。 要了解有关这些选项的信息,请通过命令行上的程序集路径运行 InstallUtil.exe,以及 /? 或 /help 选项。 要指定这些选项,请将它们与 InstallUtil.exe 所承认的选项一起包含在命令行上。
![]() |
---|
由单独的安装程序组件所支持的选项的帮助文本由 Installer.HelpText 属性返回。已经在命令行上输入的单个选项可通过编程方式从 Installer.Context 属性中进行访问。 |
所有选项和命令行参数将写入安装日志文件。 但是,如果您使用 /Password 参数,一些安装程序组件就能识别这些参数,密码信息将被替换为八个星号 (*),并不会出现在日志文件中。
![]() |
---|
在某些情况下,传递给安装程序的参数可能包含敏感或个人的可识别身份信息,默认情况下,将此信息写入纯文本日志文件。要组织此行为,可以通过在命令行上的 Installutil.exe 后指定 /LogFile=(没有文件名参数)禁止日志文件。 |
备注
.NET Framework 应用程序由传统的程序文件和关联资源组成,如必须在部署应用程序时创建的消息队列、事件日志和性能计数器。 安装应用程序时可以使用程序集的安装程序组件创建这些资源,而在卸载应用程序时可以使用这些组件删除这些资源。 Installutil.exe 检测并执行这些安装程序组件。
可以在同一个命令行上指定多个程序集。 出现在程序集名称前面的任何选项应用于该程序集的安装。 除了 /u 和 /AssemblyName 之外,选项可以累积但是可重写。 就是说,除非选项被指定新值,否则为一个程序集指定的选项适用于所有随后的程序集。
如果对某个程序集运行 Installutil.exe 但不指定任何选项,则 Installutil.exe 将下面三个文件放到该程序集的目录中:
InstallUtil.InstallLog - 包含安装进度的常规说明。
程序集.InstallLog -包含安装过程的提交阶段特定的信息。 关于提交阶段的更多信息,请参见 Commit 方法。
assemblyname.InstallState - 包含用于卸载该程序集的数据。
Installutil.exe 使用反射检查指定的程序集以及查找包含的 System.ComponentModel.RunInstallerAttribute 特性设置为 true 的所有 Installer 类型。 之后工具在 Installer 类型的每个实例上执行 Installer.Install 或 Installer.Uninstall。 Installutil.exe 以事务性方式执行安装;也就是说,如果有一个程序集未能安装,则 Installutil.exe 回滚其他所有程序集的安装。 卸载不是事务性的。
Installutil.exe 无法安装或卸载延迟签名的程序集,但可以安装或卸载具有强名称的程序集。
从 .NET Framework 2.0 版开始,32 位版本的公共语言运行时 (CLR) 仍然仅随 32 位版本的安装程序工具一起提供,但 64 位版本的 CLR 同时随 32 位和 64 位版本的安装程序工具一起提供。 当使用 64 位 CLR 时,使用 32 位安装程序工具可安装 32 位程序集,使用 64 位安装程序工具可安装 64 位和 Microsoft 中间语言 (MSIL) 程序集。 这两种版本的安装程序工具的行为相同。
无法使用 Installutil.exe 来部署使用 C++ 创建的 Windows 服务,因为 Installutil.exe 无法识别 C++ 编辑器生成的嵌入式本机节点。 如果尝试使用 Installutil.exe 部署 C++ Windows 服务,则会引发异常(如 BadImageFormatException)。 要处理这种情况,请将服务代码移到 C++ 模块,然后在 C# 或 Visual Basic 中编写安装程序对象。
示例
下列命令显示 InstallUtil.exe 的命令语法和选项的说明。
installutil /?
下列命令显示 InstallUtil.exe 的命令语法和选项的说明。 如果已向安装程序的 Installer.HelpText 属性分配了帮助文本,则它还会在 myAssembly.exe 中显示说明和安装程序组件支持的选项的列表。
installutil /? myAssembly.exe
下面的命令执行 myAssembly.exe 程序集中的安装程序组件。
installutil myAssembly.exe
下面的命令通过使用 /AssemblyName 开关和完全限定名执行程序集中的安装程序组件。
installutil /AssemblyName "myAssembly, Culture=neutral, PublicKeyToken=0038abc9deabfle5, Version=4.0.0.0"
以下命令执行以文件名指定的程序集和以强名称指定的程序集中的安装程序组件。 请注意,在命令行上,按文件名称指定的所有程序集必须先于按强名称指定的程序集,因为无法重写 /AssemblyName 选项。
installutil myAssembly.exe /AssemblyName "myAssembly, Culture=neutral, PublicKeyToken=0038abc9deabfle5, Version=4.0.0.0"
下面的命令执行 myAssembly.exe 程序集中的卸载程序组件。
installutil /u myAssembly.exe
以下命令执行程序集 myAssembly1.exe 和 myAssembly2.exe 中的卸载程序组件。
installutil myAssembly1.exe /u myAssembly2.exe
由于 /u 选项在命令行上所处的位置不重要,这就等效于以下命令。
installutil /u myAssembly1.exe myAssembly2.exe
下面的命令执行 myAssembly.exe 程序集中的安装程序并指定将进度信息写入 myLog.InstallLog 中。
installutil /LogFile=myLog.InstallLog myAssembly.exe
以下命令执行程序集 myAssembly.exe 中的安装程序,指定要写入 myLog.InstallLog 的进度信息,并使用安装程序的自定义 /reg 选项来指明应在系统注册表中进行更新。
installutil /LogFile=myLog.InstallLog /reg=true myAssembly.exe
以下命令执行程序集 myAssembly.exe 中的安装程序,使用安装程序的自定义 /email 选项来指定用户的电子邮件地址,并禁止显示输出到日志文件中。
installutil /LogFile= /email=admin@mycompany.com myAssembly.exe
下面的命令将 myAssembly.exe 的安装进度写入 myLog.InstallLog 中,并将 myTestAssembly.exe 的进度写入 myTestLog.InstallLog 中。
installutil /LogFile=myLog.InstallLog myAssembly.exe /LogFile=myTestLog.InstallLog myTestAssembly.exe
请参见
参考
Visual Studio 和 Windows SDK 命令提示
其他资源
修订记录
Date |
修订记录 |
原因 |
---|---|---|
2011 年 4 月 |
添加了有关使用 Visual Studio 和 Windows SDK 命令提示符的信息。 |
信息补充。 |