【发布时间】:2011-09-01 21:22:05
【问题描述】:
我有一个在 Visual Studio 2010 中制作的 Visual Studio 安装程序项目,但无法弄清楚如何从向导的对话框中删除“欢迎使用 [产品名称] 安装向导”文本。
例如:如何从下面的屏幕截图中删除文本“欢迎使用 Setup1 设置向导”?
【问题讨论】:
标签: visual-studio-2010 installation setup-project
我有一个在 Visual Studio 2010 中制作的 Visual Studio 安装程序项目,但无法弄清楚如何从向导的对话框中删除“欢迎使用 [产品名称] 安装向导”文本。
例如:如何从下面的屏幕截图中删除文本“欢迎使用 Setup1 设置向导”?
【问题讨论】:
标签: visual-studio-2010 installation setup-project
您可以通过删除欢迎对话框并将其替换为自定义对话框来“删除”文本。在 VS 2005 中 -
然后您可以在项目中添加一个“文本框 (A)”对话框(右键单击“开始”组并选择添加对话框),将文本框的可见属性设置为 false。将文本框 (A) 移动到“开始”序列的顶部。
此对话框的属性包括:
BannerBitmapBannerTextBodyText这应该允许您(在一定程度上)控制这个新“欢迎”页面的外观/感觉。
【讨论】:
Visual Studio 安装项目不支持此功能。
一种解决方案是使用 Orca 编辑 MSI 以修改控制文本,但您必须在每次构建后执行此操作。因此,您可以保持这种方式,也可以使用其他允许您自定义安装对话框的设置创作工具。
【讨论】:
我通过修改我从网上找到的各种其他结果拼凑而成的方法来实现这一点。
第 1 步:将以下内容另存为 removebannertext.vbs 在安装项目的根文件夹中:
Option Explicit
If (Wscript.Arguments.Count < 1) Then
Wscript.Echo "Windows Installer utility to execute SQL queries against an installer database." & vbCRLf & " The 1st argument specifies the path to the MSI database, relative or full path"
Wscript.Quit 1
End If
Dim openMode : openMode = 1 'msiOpenDatabaseModeTransact
On Error Resume Next
Dim installer : Set installer = Wscript.CreateObject("WindowsInstaller.Installer") : CheckError
' Open database
Dim database : Set database = installer.OpenDatabase(Wscript.Arguments(0), openMode) : CheckError
Wscript.Echo "Removing all BannerText..."
Dim query
query = "UPDATE `Control` SET `Control`.`Attributes`=0 WHERE `Control`.`Control`='BannerText'"
Dim view : Set view = database.OpenView(query) : CheckError
view.Execute : CheckError
database.Commit
Wscript.Echo "Done."
Wscript.Quit 0
Sub CheckError
Dim message, errRec
If Err = 0 Then Exit Sub
message = Err.Source & " " & Hex(Err) & ": " & Err.Description
If Not installer Is Nothing Then
Set errRec = installer.LastErrorRecord
If Not errRec Is Nothing Then message = message & vbCRLf & errRec.FormatText
End If
Wscript.Echo message
Wscript.Quit 2
End Sub
第 2 步:将项目的 PostBuildEvent 属性设置为:
cscript.exe "$(ProjectDir)removebannertext.vbs" "$(BuiltOuputPath)"
【讨论】:
BannerText名字吗?另外,我想在欢迎对话框中更新BannerText,否则对话框未更新,但目前,所有对话框都已更新,你能建议吗?
Goner Doug Answer 效果很好。
但是ProgressBar BannerText 没有被删除。我猜不是删除Goner Doug 建议的BannnerText 控件中的属性值,如果我们可以清空BannerText 字符串那么它可能会很好。我们也可以通过同样的操作删除ProgressBar窗口的Banner文本。请注意,删除属性值不适用于 ProgressBar 横幅文本。
在 Goner Doug 的回答中,
将query 替换为
query = "UPDATE `Control` SET `Control`.`Text`='' WHERE `Control`.`Control`='InstalledBannerText' OR `Control`.`Control`='BannerText' OR `Control`.`Control`='RemoveBannerText'"
这也将删除进度条窗口中的横幅文本。
Option Explicit
If (Wscript.Arguments.Count < 1) Then
Wscript.Echo "Windows Installer utility to execute SQL queries against an installer database." & vbCRLf & " The 1st argument specifies the path to the MSI database, relative or full path"
Wscript.Quit 1
End If
Dim openMode : openMode = 1 'msiOpenDatabaseModeTransact
On Error Resume Next
Dim installer : Set installer = Wscript.CreateObject("WindowsInstaller.Installer") : CheckError
' Open database
Dim database : Set database = installer.OpenDatabase(Wscript.Arguments(0), openMode) : CheckError
Wscript.Echo "Removing all BannerText..."
Dim query
query = "UPDATE `Control` SET `Control`.`Text`='' WHERE `Control`.`Control`='InstalledBannerText' OR `Control`.`Control`='BannerText' OR `Control`.`Control`='RemoveBannerText'"
Dim view : Set view = database.OpenView(query) : CheckError
view.Execute : CheckError
database.Commit
Wscript.Echo "Done."
Wscript.Quit 0
Sub CheckError
Dim message, errRec
If Err = 0 Then Exit Sub
message = Err.Source & " " & Hex(Err) & ": " & Err.Description
If Not installer Is Nothing Then
Set errRec = installer.LastErrorRecord
If Not errRec Is Nothing Then message = message & vbCRLf & errRec.FormatText
End If
Wscript.Echo message
Wscript.Quit 2
End Sub
【讨论】:
您可以通过在记事本中修改项目文件轻松更改欢迎文本。 (即 project1.vdproj)确保更改 ProductName 或 Title。具体是哪一个我记不清了,然后重新构建项目,就大功告成了。
【讨论】:
一种解决方案(如果您的设置创建过程不冗长) - 您必须从头开始进行设置,然后在提示输入设置名称时将其重命名为“我的设置”。
【讨论】: