Installutil.exe(安装程序工具)
安装程序工具是一个命令行实用工具,你可以通过此工具执行指定程序集中的安装程序组件,从而安装和卸载服务器资源。 此工具与 System.Configuration.Install 命名空间中的类配合使用。
此工具会自动随 Visual Studio 一起安装。 若要运行该工具,请使用 Visual Studio 开发人员命令提示或 Visual Studio 开发人员 PowerShell。
在命令提示符处,键入以下内容:
语法
installutil [/u[ninstall]] [options] assembly [[options] assembly] ...
参数
参数 | 说明 |
---|---|
assembly |
要在其中执行安装程序组件的程序集的文件名称。 如果你要通过使用 /AssemblyName 选项指定程序集的强名称,则忽略此参数。 |
选项
选项 | 描述 |
---|---|
/h[elp] \- 或 - /? |
显示该工具的命令语法和选项。 |
/help assembly-或- /? assembly |
显示由指定的程序集中的个别安装程序识别的其他选项,以及 InstallUtil.exe 的命令语法和选项。 此选项将各安装程序组件的 Installer.HelpText 属性返回的文本添加到 InstallUtil.exe 的帮助文本。 例如,如果 ServiceProcessInstaller.Account 为 User ,则 /username 和 /password 选项可用。 |
/AssemblyName "assemblyName,Version=major.minor.build.revision ,Culture=locale ,PublicKeyToken=publicKeyToken" |
指定必须在全局程序集缓存中注册的程序集的强名称。 必须使用程序集的版本、区域性和公钥标记完全限定程序集名称。 完全限定名必须用引号括起。 例如,“myAssembly, Culture=neutral, PublicKeyToken=0038abc9deabfle5, Version=4.0.0.0”是完全限定的程序集名称。 |
/InstallStateDir=[ directoryName ] |
指定 .InstallState 文件的目录,其中包含用来卸载程序集的数据。 默认为包含程序集的目录。 |
/LogFile= [filename] |
指定在其中记录安装进度的日志文件的名称。 默认情况下,如果省略 /LogFile 选项,则会创建名为 assemblyname.InstallLog 的日志文件。 如果省略 filename,则不生成任何日志文件。 |
/LogToConsole ={true |false } |
如果为 true ,则会将输出显示到控制台。 如果为 false (默认值),则取消将输出显示到控制台。 |
/ShowCallStack |
如果在安装过程中的任何时候出现异常,则将调用堆栈输出到日志文件。 |
/u [ninstall ] |
卸载指定的程序集。 与其他选项不同,/u 选项不论出现在命令行的什么位置,都将应用于所有程序集。 |
其他安装程序选项
程序集中使用的独立安装程序可识别除选项部分列出的选项之外的选项。 要了解有关这些选项的信息,可以在命令行中运行带有程序集路径的 InstallUtil.exe 以及 /?
或 /help
选项。 要指定这些选项,请将它们与 InstallUtil.exe 可识别的选项一起包含在命令行中。
备注
由单独的安装程序组件所支持的选项的帮助文本由 Installer.HelpText 属性返回。 已经在命令行中输入的单个选项可通过编程方式从 Installer.Context 属性进行访问。
所有选项和命令行参数都将写入到安装日志文件中。 但是,如果使用 /Password
由某些安装程序组件识别的参数,密码信息将替换为八个星号 \ , 并且不会显示在日志文件中。
重要
在某些情况下,传递给安装程序的参数可能包含敏感信息或个人身份信息,默认情况下,此信息将写入到纯文本日志文件中。 若要防止此行为,可以通过在命令行上指定 /LogFile=
(没有 文件名参数)来禁止日志文件 。
注解
.NET Framework 应用程序由传统的程序文件和关联的资源(例如消息队列、事件日志和性能计数器)组成,必须在部署应用程序时创建这些计数器。 安装应用程序时可以使用程序集的安装程序组件创建这些资源,而在卸载应用程序时可以使用这些组件删除这些资源。 Installutil.exe 检测并执行这些安装程序组件。
可以在同一个命令行中指定多个程序集。 出现在一个程序集名称前面的任何选项都将应用于该程序集的安装。 除了 /u
和 /AssemblyName
之外,选项可以是累积的,但也是可重写的。 就是说,为一个程序集指定的选项适用于所有后续程序集,除非为该选项指定新值。
如果对某个程序集运行 Installutil.exe 但不指定任何选项,则 Installutil.exe 会将下面三个文件放到该程序集的目录中:
- InstallUtil.InstallLog - 包含安装进度的常规说明。
- assemblyname.InstallLog - 包含特定于安装过程的提交阶段的信息。 关于提交阶段的更多信息,请参见 Commit 方法。
- assemblyname.InstallState - 包含用于卸载该程序集的数据。
Installutil.exe 使用反射检查指定的程序集以及查找将 Installer 特性设置为 System.ComponentModel.RunInstallerAttribute 的所有 true
类型。 该工具然后对 Installer.Install 类型的每个实例执行 Installer.Uninstall 或 Installer 方法。 Installutil.exe 以事务性方式执行安装;也就是说,如果有一个程序集未能安装,则 Installutil.exe 会回滚其他所有程序集的安装。 卸载不是事务性的。
Installutil.exe 无法安装或卸载延迟签名的程序集,但可以安装或卸载具有强名称的程序集。
公共语言运行时 (CLR) 的 32 位版本仅附带 32 位版本的 Installer 工具,但 CLR 的 64 位版本附带了 32 位和 64 位版本的 Installer 工具。 使用 64 位 CLR 时,使用 32 位安装程序工具安装 32 位程序集,使用 64 位安装程序工具安装 64 位和公共中间语言 (CIL) 程序集。 这两种版本的安装程序工具的行为方式相同。
无法使用Installutil.exe来部署使用 C++ 创建的 Windows 服务,因为Installutil.exe无法识别由C++编译器生成的嵌入式本机代码。 如果尝试使用 Installutil.exe 部署 C++ Windows 服务,则会引发异常(如 BadImageFormatException)。 要处理这种情况,请将服务代码移到 C++ 模块,然后使用 C# 或 Visual Basic 编写安装程序对象。
示例
下列命令显示了 InstallUtil.exe 的命令语法和选项的说明。
installutil /?
下列命令显示了 InstallUtil.exe 的命令语法和选项的说明。 如果已向安装程序的 myAssembly.exe
属性分配了帮助文本,则它还会在 Installer.HelpText 中显示安装程序组件支持的选项的说明的列表。
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