Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2008 是否使用Orca从命令行编辑msi?_Visual Studio 2008_Windows Installer_Icons_Orca - Fatal编程技术网

Visual studio 2008 是否使用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

我正在使用VisualStudio2008,并为我的应用程序创建了一个安装项目。该应用程序有一个高分辨率图标(适用于Vista)。Visual Studio中有一个错误,安装程序创建了一个带有低分辨率图标的桌面快捷方式

我在MicrosoftConnect()中记录了这个错误,最后得到了一个答案,那就是使用Orca编辑msi文件并替换图标。这个解决方案很好用


现在我想自动化这个过程,这样我就可以把它包括在我的构建脚本中。有办法吗?

您可以使用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