【问题标题】:How to remove "Welcome to the Setup Wizard" text from Visual Studio Installer project如何从 Visual Studio 安装程序项目中删除“欢迎使用安装向导”文本
【发布时间】:2011-09-01 21:22:05
【问题描述】:

我有一个在 Visual Studio 2010 中制作的 Visual Studio 安装程序项目,但无法弄清楚如何从向导的对话框中删除“欢迎使用 [产品名称] 安装向导”文本。

例如:如何从下面的屏幕截图中删除文本“欢迎使用 Setup1 设置向导”?

【问题讨论】:

    标签: visual-studio-2010 installation setup-project


    【解决方案1】:

    您可以通过删除欢迎对话框并将其替换为自定义对话框来“删除”文本。在 VS 2005 中 -

    1. 在解决方案资源管理器中右键单击设置项目
    2. 选择视图 - 用户界面
    3. 在安装和管理安装的开始组下删除“欢迎”

    然后您可以在项目中添加一个“文本框 (A)”对话框(右键单击“开始”组并选择添加对话框),将文本框的可见属性设置为 false。将文本框 (A) 移动到“开始”序列的顶部。

    此对话框的属性包括:

    • BannerBitmap
    • BannerText
    • BodyText

    这应该允许您(在一定程度上)控制这个新“欢迎”页面的外观/感觉。

    【讨论】:

      【解决方案2】:

      Visual Studio 安装项目不支持此功能。

      一种解决方案是使用 Orca 编辑 MSI 以修改控制文本,但您必须在每次构建后执行此操作。因此,您可以保持这种方式,也可以使用其他允许您自定义安装对话框的设置创作工具。

      【讨论】:

        【解决方案3】:

        我通过修改我从网上找到的各种其他结果拼凑而成的方法来实现这一点。

        第 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,否则对话框未更新,但目前,所有对话框都已更新,你能建议吗?
        【解决方案4】:

        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
        

        【讨论】:

          【解决方案5】:

          您可以通过在记事本中修改项目文件轻松更改欢迎文本。 (即 project1.vdproj)确保更改 ProductName 或 Title。具体是哪一个我记不清了,然后重新构建项目,就大功告成了。

          【讨论】:

          • 请详细说明。显示的横幅文本不会出现在文件中。 [ProductName] 在文件中显示为占位符。文件究竟必须如何更改?
          【解决方案6】:

          一种解决方案(如果您的设置创建过程不冗长) - 您必须从头开始进行设置,然后在提示输入设置名称时将其重命名为“我的设置”。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-01-15
            • 1970-01-01
            相关资源
            最近更新 更多