Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/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
使用vbscript设置MSI的程序包代码_Vbscript_Wix_Windows Installer_Orca - Fatal编程技术网

使用vbscript设置MSI的程序包代码

使用vbscript设置MSI的程序包代码,vbscript,wix,windows-installer,orca,Vbscript,Wix,Windows Installer,Orca,我正在通过编辑MSI数据库更改MSI的产品代码、升级代码和产品名称 参考:- 我可以更改上面的所有参数,但无法更改程序包代码 建议更改软件包代码的方法。为什么您甚至需要设置软件包代码 它在每次构建期间自动生成 查看包元素的文档: 产品或合并模块的包代码GUID。编译产品时,不应设置此属性以允许为每个生成生成包代码。编译合并模块时,此属性必须设置为模块化guid。为什么您甚至需要设置包代码 它在每次构建期间自动生成 查看包元素的文档: 产品或合并模块的包代码GUID。编译产品时,不应设置此属性以允

我正在通过编辑MSI数据库更改MSI的产品代码、升级代码和产品名称

参考:-

我可以更改上面的所有参数,但无法更改程序包代码


建议更改软件包代码的方法。

为什么您甚至需要设置软件包代码

它在每次构建期间自动生成

查看包元素的文档:


产品或合并模块的包代码GUID。编译产品时,不应设置此属性以允许为每个生成生成包代码。编译合并模块时,此属性必须设置为模块化guid。

为什么您甚至需要设置包代码

它在每次构建期间自动生成

查看包元素的文档:


产品或合并模块的包代码GUID。编译产品时,不应设置此属性以允许为每个生成生成包代码。编译合并模块时,必须将此属性设置为模块化guid。

我需要它,因为MSI在各自的包代码中创建了缓存,这限制了我们使用MSI创建另一个应用程序实例,所以我通过

using (var database = new Database(@"D:\\Nirvana\\WorkingCopy\\trunk\\proj1\\installer.msi", DatabaseOpenMode.Direct))
{
     database.SummaryInfo.RevisionNumber = "{" +  Guid.NewGuid() + "}";
}   

我需要它,因为MSI在各自的包代码中创建了缓存,这限制了我们使用MSI创建另一个应用程序实例,所以我通过

using (var database = new Database(@"D:\\Nirvana\\WorkingCopy\\trunk\\proj1\\installer.msi", DatabaseOpenMode.Direct))
{
     database.SummaryInfo.RevisionNumber = "{" +  Guid.NewGuid() + "}";
}   

我猜这里的要求是多次安装同一个MSI,这意味着他们需要更改这组GUID。但是,解决该问题的更正常的方法是使用MSINEWINSTANCE


这样您就不会每次都更改基本MSI文件

我猜这里的要求是多次安装同一个MSI,这意味着他们需要更改这组GUI。但是,解决该问题的更正常的方法是使用MSINEWINSTANCE


这样您就不会每次都更改基本MSI文件

出于好奇,找到了一种使用vbscript的方法: 是机组代码修订号

Set wi = CreateObject("WindowsInstaller.Installer")
Set summary = wi.SummaryInformation("your.msi", 2)
summary.Property(9) = "{PUT-NEW-GUID-HERE}"
summary.Persist

出于好奇,找到了一种使用vbscript的方法: 是机组代码修订号

Set wi = CreateObject("WindowsInstaller.Installer")
Set summary = wi.SummaryInformation("your.msi", 2)
summary.Property(9) = "{PUT-NEW-GUID-HERE}"
summary.Persist

我扩展了Nikolay脚本以自动生成随机GUID。该脚本还支持拖放和通过参数调用,因此您可以通过cscript轻松地将其自动化,并在创建Windows Installer对象之前检查文件是否可写。如果文件被某些应用程序(如InstEd)锁定,它将抛出错误

Set objArgs=Wscript.Arguments 设置objFso=CreateObjectscripting.filesystemobject '遍历所有传递的参数 ' https://community.spiceworks.com/scripts/show/1653-drag-drop-vbscript-framework 对于i=0到objArgs.count 出错时继续下一步 '尝试将参数视为文件夹 Set folder=objFso.GetFolderobjArgsi '如果我们得到一个错误,我们知道它是一个文件 如果错误号为0,则 '这不是文件夹,请视为文件 ProcessFileobjArgsi 其他的 “没有错吗?这是一个文件夹,请进行相应的处理 对于文件夹.Files中的每个文件 处理文件 下一个 如果结束 错误转到0 下一个 函数ProcessFilePath ' http://www.wisesoft.co.uk/scripts/vbscript_file_modified_date.aspx '设置objFile=objFSO.getfilefilepath 'MsgBox正在处理文件:&CDATE objFile.DateLastModified 如果不是IsWriteAccessiblesFilePath,则WScript.Echo在持久化摘要属性流时出错:WScript.Quit 2 '对此处的文件执行某些操作。。。 ' https://stackoverflow.com/questions/31536349/set-package-code-of-msi-using-vbscript Set installer=CreateObjectWindowsInstaller.installer Set summary=installer.SummaryInformationsFilePath,2 summary.Property9=CreateGuid 总结。坚持 端函数 ' https://stackoverflow.com/questions/968756/how-to-generate-a-guid-in-vbscript 函数CreateGuid CreateGuid=LeftCreateObjectScriptlet.TypeLib.Guid,38 端函数 ' https://stackoverflow.com/questions/12300678/how-can-i-determine-if-a-file-is-locked-using-vbs 函数为WriteAccessiblesFilePath '策略:尝试以'append'模式打开指定的文件。 '似乎不会更改文件上的“修改”日期。 '可用于二进制文件和文本文件。 这里只需要“ForAppending”。定义这些常量 '如果您在中的其他位置需要它们,则在该函数之外 '您的源文件。 读取常数=1,写入常数=2,外观常数=8 IsWriteAccessible=False Dim oFso:Set oFso=CreateObjectScripting.FileSystemObject 出错时继续下一步 调光能率:能率=0 尺寸sDesc:sDesc= Dim oFile:设置oFile=oFso.OpenTextFilesFilePath,用于显示 如果Err.Number=0,则 奥菲尔,关门 如果有错误,那么 nErr=错误编号 sDesc=错误描述 其他的 IsWriteAccessible=True 如果结束 其他的 选择案例错误编号 案例70 '权限被拒绝,因为: “-文件已由另一个进程打开 '-在文件*上设置了只读位,或* '-NTFS访问控制列表设置文件上的ACL '阻止访问 其他情况 '52-错误的文件名或编号 '53-找不到文件 '76-找不到路径 nErr=错误编号 sDesc=错误描述 结束选择 如果结束 "以下两句话是多余的。VB6垃圾 当此函数完成时,收集器将释放'oFile'和'oFso' “它们超出了范围。有关更多信息,请参阅Eric Lippert的文章: ' http://blogs.msdn.com/b/ericlippert/archive/2004/04/28/when-are-you-required-to-set-objects-to-nothing.aspx '文件集=无 '一套SO=零 错误转到0 如果是nErr那么 错误。提高nErr,sDesc 如果结束 端函数
我扩展了Nikolay脚本以自动生成随机GUID。该脚本还支持拖放和通过参数调用,因此您可以通过cscript轻松地将其自动化,并在创建Windows Installer对象之前检查文件是否可写。如果文件被某些应用程序(如InstEd)锁定,它将抛出错误

Set objArgs=Wscript.Arguments 设置objFso=CreateObjectscripting.filesystemobject '遍历所有传递的参数 ' https://community.spiceworks.com/scripts/show/1653-drag-drop-vbscript-framework 对于i=0到objArgs.count 出错时继续下一步 '尝试将参数视为文件夹 Set folder=objFso.GetFolderobjArgsi '如果我们得到一个错误,我们知道它是一个文件 如果错误号为0,则 '这不是文件夹,请视为文件 ProcessFileobjArgsi 其他的 “没有错吗?这是一个文件夹,请进行相应的处理 对于文件夹.Files中的每个文件 处理文件 下一个 如果结束 错误转到0 下一个 函数ProcessFilePath ' http://www.wisesoft.co.uk/scripts/vbscript_file_modified_date.aspx '设置objFile=objFSO.getfilefilepath 'MsgBox正在处理文件:&CDATE objFile.DateLastModified 如果不是IsWriteAccessiblesFilePath,则WScript.Echo在持久化摘要属性流时出错:WScript.Quit 2 '对此处的文件执行某些操作。。。 ' https://stackoverflow.com/questions/31536349/set-package-code-of-msi-using-vbscript Set installer=CreateObjectWindowsInstaller.installer Set summary=installer.SummaryInformationsFilePath,2 summary.Property9=CreateGuid 总结。坚持 端函数 ' https://stackoverflow.com/questions/968756/how-to-generate-a-guid-in-vbscript 函数CreateGuid CreateGuid=LeftCreateObjectScriptlet.TypeLib.Guid,38 端函数 ' https://stackoverflow.com/questions/12300678/how-can-i-determine-if-a-file-is-locked-using-vbs 函数为WriteAccessiblesFilePath '策略:尝试以'append'模式打开指定的文件。 '似乎不会更改文件上的“修改”日期。 '可用于二进制文件和文本文件。 这里只需要“ForAppending”。定义这些常量 '如果您在中的其他位置需要它们,则在该函数之外 '您的源文件。 读取常数=1,写入常数=2,外观常数=8 IsWriteAccessible=False Dim oFso:Set oFso=CreateObjectScripting.FileSystemObject 出错时继续下一步 调光能率:能率=0 尺寸sDesc:sDesc= Dim oFile:设置oFile=oFso.OpenTextFilesFilePath,用于显示 如果Err.Number=0,则 奥菲尔,关门 如果有错误,那么 nErr=错误编号 sDesc=错误描述 其他的 IsWriteAccessible=True 如果结束 其他的 选择案例错误编号 案例70 '权限被拒绝,因为: “-文件已由另一个进程打开 '-在文件*上设置了只读位,或* '-NTFS访问控制列表设置文件上的ACL '阻止访问 其他情况 '52-错误的文件名或编号 '53-找不到文件 '76-找不到路径 nErr=错误编号 sDesc=错误描述 结束选择 如果结束 "以下两句话是多余的。VB6垃圾 当此函数完成时,收集器将释放'oFile'和'oFso' “它们超出了范围。有关更多信息,请参阅Eric Lippert的文章: ' http://blogs.msdn.com/b/ericlippert/archive/2004/04/28/when-are-you-required-to-set-objects-to-nothing.aspx '文件集=无 '一套SO=零 错误转到0 如果是nErr那么 错误。提高nErr,sDesc 如果结束 端函数
我也不太明白你的问题。通常,没有人生成PackageCodes,它们是在构建时自动生成的。为什么要在生成后再次将值更改为ano
那个随机guid?!因为我想从同一个MSI包创建多个实例,而不是再次构建MSI。所以有必要更改包代码,以便您从同一MSI创建独立实例。我也不太理解您的问题。通常,没有人生成PackageCodes,它们是在构建时自动生成的。为什么要在生成后再次将值更改为另一个随机guid?!因为我想从同一个MSI包创建多个实例,而不是再次构建MSI。因此,有必要更改程序包代码,以便您从同一MSI创建独立实例。我同意您的意见,但我们的要求是创建独立实例…我已经查看了MSINEWINSTANCE,但我认为更改基本MSI没有问题?我同意您的意见,但我们的要求是创建独立实例…我已经研究了MSINEWINSTANCE,但我认为在更改基本MSI时没有问题?