Visual studio 2008 是否使用Orca从命令行编辑msi?
我正在使用VisualStudio2008,并为我的应用程序创建了一个安装项目。该应用程序有一个高分辨率图标(适用于Vista)。Visual Studio中有一个错误,安装程序创建了一个带有低分辨率图标的桌面快捷方式 我在MicrosoftConnect()中记录了这个错误,最后得到了一个答案,那就是使用Orca编辑msi文件并替换图标。这个解决方案很好用Visual studio 2008 是否使用Orca从命令行编辑msi?,visual-studio-2008,windows-installer,icons,orca,Visual Studio 2008,Windows Installer,Icons,Orca,我正在使用VisualStudio2008,并为我的应用程序创建了一个安装项目。该应用程序有一个高分辨率图标(适用于Vista)。Visual Studio中有一个错误,安装程序创建了一个带有低分辨率图标的桌面快捷方式 我在MicrosoftConnect()中记录了这个错误,最后得到了一个答案,那就是使用Orca编辑msi文件并替换图标。这个解决方案很好用 现在我想自动化这个过程,这样我就可以把它包括在我的构建脚本中。有办法吗?您可以使用perl脚本修改安装程序msi包。你可以用这个。使用Wi
现在我想自动化这个过程,这样我就可以把它包括在我的构建脚本中。有办法吗?您可以使用perl脚本修改安装程序msi包。你可以用这个。使用
Win32::OLE->new
API打开MSI。打开MSI数据库并执行SQL查询以执行更新
这个perl脚本可以在构建中使用
这可能会帮助您编写所需的命令。您可以编写VBS、JS(使用每个Windows内置的cscript)来修改MSI,语法与SQL非常相似。
由于您习惯于使用Orca,只需使用Orca将修改保存为转换文件,然后在安装项目的后期生成事件中将其与“msitran”一起应用即可。
我在一个安装项目中使用它,效果非常好。我也必须这样做-这是我的VBScript文件(以防对任何人有用)
安装程序
Dim MSI数据库
暗视野
暗MSI记录
暗淡的可怜虫
暗路径
如果WScript.Arguments.Count为2,则
WScript.Echo“用法:&vbCrLf&&WScript.ScriptName&”
WScript.Quit
如果结束
Dim pathToMsi,pathToIcon
pathToMsi=WScript.Arguments(0)
pathToIcon=WScript.Arguments(1)
设置msiInstaller=CreateObject(“WindowsInstaller.Installer”)
Set-msiRecord=msiInstaller.CreateRecord(1)
MSICORD.SetStream 1,路径图标
Set msilatabase=msinstaller.OpenDatabase(pathToMsi,1)
Set-msiView=msiDatabase.OpenView(“更新图标集数据=?其中名称“”))
msiView。执行MSICrecord
msiDatabase.Commit
此脚本将MSI数据库中的所有快捷方式图标替换为一个图标-如果您需要选择,那么您还有更多的工作要做。可能我找到的最简单的解决方案是在Orca内部创建一个新的“转换”,然后将转换作为构建后步骤的一部分应用 1) 使用ORCA打开MSI文件进行编辑。 2) 单击“新建变换” 3) 使用Orca编辑器对MSI表进行所有适用的更改。 4) 单击“生成转换”,并保存文件。 5) 编辑生成事件以在生成后步骤中执行msitran。像这样 msitran-a(转换文件的路径)(MSI文件的路径) 有关MSITran.exe的更多信息,请访问以下位置。。。
安装程序构建完成后,这将自动将您的编辑应用于MSI文件,无需自定义VBScript。对于将执行这些查询的VBScript,请尝试在谷歌搜索“WiRunSQL.vbs源”,效果非常好!比基于VBScript的解决方案干净得多。我想将值分配给ProductVersion属性。通过转换文件是否可能?一个疑问:如果将Orca以前创建的转换应用于当前的产品版本,我们将失去为最新版本生成的主要输出,对吗?它将生成.mst二进制文件。。。这是不容易编辑,如果我想改变字符串的飞行和更新安装程序频繁
Dim msiInstaller
Dim msiDatabase
Dim msiView
Dim msiRecord
Dim pathToMsiFile
Dim pathToIconFile
If WScript.Arguments.Count <> 2 Then
WScript.Echo "Usage:" & vbCrLf & " " & WScript.ScriptName & " <path-to-msi> <path-to-icon>"
WScript.Quit
End If
Dim pathToMsi, pathToIcon
pathToMsi = WScript.Arguments(0)
pathToIcon = WScript.Arguments(1)
Set msiInstaller = CreateObject("WindowsInstaller.Installer")
Set msiRecord = msiInstaller.CreateRecord(1)
msiRecord.SetStream 1, pathToIcon
Set msiDatabase = msiInstaller.OpenDatabase(pathToMsi, 1)
Set msiView = msiDatabase.OpenView("UPDATE Icon SET Data = ? WHERE Name <> ''")
msiView.Execute msiRecord
msiDatabase.Commit