我正在尝试使用Microsoft桌面应用转换器(AKA桌面桥),我们的发布商名称中包含逗号,空格和句点。
例如。 CN="Acme, Inc."
这不起作用:
DesktopAppConverter.exe -Installer .\Installer.msi -Destination AppxFolder -PackageName "AcmeApp" -Publisher "CN=Acme, Inc." -Version 1.0.0.0 -MakeAppx
我尝试了各种方法来逃避引号,如:
-Publisher "CN=\`"Acme`, Inc.\`""
结果:
无法找到接受参数'Inc。'的位置参数。
此:
-Publisher 'CN="Acme, Inc."'
结果:
由于输入无效,Appx清单验证失败:'Publisher'无法分配值'CN = Acme,Inc。'原始错误:'异常调用“SetPackageIdentityPublisher”带有“1”参数:“针对模式验证AppxManifest.xml失败并显示错误:在XML中找到错误(0):'Publisher'属性无效 - 值'CN = Acme,Inc。'根据其数据类型“http://schemas.microsoft.com/appx/manifest/types:ST_Publisher_2010_v2”无效 - 模式约束失败。
此:
-Publisher 'CN="Acme\`, Inc."'
结果:
由于输入无效,Appx清单验证失败:'Publisher'无法分配值'CN = Acme`,Inc。'原始错误:'异常调用“SetPackageIdentityPublisher”带有“1”参数:“针对模式验证AppxManifest.xml失败,错误:
在XML(0)中发现错误:'Publisher'属性无效 - 值'CN = Acme`,Inc。'根据其数据类型“http://schemas.microsoft.com/appx/manifest/types:ST_Publisher_2010_v2”无效 - 模式约束失败。
此:
-Publisher "CN=Acme, Inc."
结果:
由于输入无效,Appx清单验证失败:'发布者' 无法分配值'CN = Acme,Inc。' 原始错误:'异常调用“SetPackageIdentityPublisher”带有“1”参数:“针对模式验证AppxManifest.xml失败并显示错误:在XML中找到错误(0):'Publisher'属性无效 - 值'CN = Acme,Inc。'根据其数据类型“http://schemas.microsoft.com/appx/manifest/types:ST_Publisher_2010_v2”无效 - 模式约束失败。
此:
-Publisher "CN='Acme\, Inc.'"
结果:
无法找到接受参数'System.Object []'的位置参数。
此:
-Publisher "CN=Acme\, Inc."
结果:
由于输入无效,Appx清单验证失败:'发布者' 无法分配值'CN = Acme \,Inc。' 原始错误:'异常调用“SetPackageIdentityPublisher”带有“1”参数:“针对模式验证AppxManifest.xml失败并显示错误:在XML中找到错误(0):'Publisher'属性无效 - 值'CN = Acme \,Inc。'根据其数据类型“http://schemas.microsoft.com/appx/manifest/types:ST_Publisher_2010_v2”无效 - 模式约束失败。
这很烦人,因为我们需要完美地设置发布者名称,否则签名将无法使用,因为它与我们的代码签名证书中的发布者名称不匹配。
这样做的正确方法是什么?
答案 0 :(得分:0)
除双引号外,您还需要转义逗号。此外,将enire公共名称放在单引号而不是双引号中,因此您无需转义两次(对于PowerShell 和 Active Directory)。
... -Publisher 'CN=\"Acme\, Inc.\"' ...
有关杰出名称中字符转义的详细信息,请参阅Richard L. Mueller的this article。
答案 1 :(得分:0)
根据Microsoft关于appxmanifest的文档,只要发布者名称被引号(“)包围,就可以在发布者名称中包含逗号而不会出现问题:
https://msdn.microsoft.com/en-us/library/windows/apps/br211441.aspx
所以真正的问题是如何将带引号的发布者名称传递给AppConverter。
解决方案似乎是在通过这样的发布者时代表“with \”\“:
-Publisher 'CN=\"\"Company, Name\"\"'
这里的完整命令:
DesktopAppConverter.exe -Installer myInstaller.exe -InstallerArguments "/S" -Destination . -PackageName "MyApp" -Publisher 'CN=\"\"Company, Name\"\"' -Version 0.0.0.1 -MakeAppx
然而,DesktopAppConverter中似乎存在一个错误。我得到的结果是:
CN =“公司,名称
结果中缺少第二个“。我不确定为什么DesktopAppConverter无法识别第二个\”\“特殊字符,但事实就是这样,所以我们不幸被困在这里。
更新:找到解决方案。通过反复试验,我发现添加双引号“”有助于识别第二个引用。以下是有效的:
-Publisher 'CN=\"\"Company, Name""\"\"'
答案 2 :(得分:0)
不支持在桌面应用转换(DAC)的发布商参数中包含“逗号”。这是因为此值用于填充AppxManifest.xml file
中Identity节点中的Publisher元素(包含在DAC生成的APPX中。
示例AppxManifest.xml
文件中的测试如下:
<Identity Version="0.0.0.2" Publisher="CN=Awesome,Apps-Inc" ProcessorArchitecture="x86" Name="MyNotesFW"/>
当您尝试创建APPX文件时,您将收到此错误:
MakeAppx : error: Error info: error C00CE169: App manifest validation error: The app manifest must be valid as per schema: Line 3, Column 58, Reason: 'CN=Awesome,Apps-Inc' violates pattern constraint of '(CN|L|O|OU|E|C|S|STREET|T|G|I|SN|DC|SERIALNUMBER|Description|PostalCode|POBox|Phone|X21Address|dnQualifier|(OID\.(0|[1-9][0-9]*)(\.(0|[1-9][0-9]*))+))=(([^,+="<>#;])+|".*")(, ((CN|L|O|OU|E|C|S|STREET|T|G|I|SN|DC|SERIALNUMBER|Description|PostalCode|POBox|Phone|X21Address|dnQualifier|(OID\.(0|[1-9][0-9]*)(\.(0|[1-9][0-9]*))+))=(([^,+="<>#;])+|".*")))*'.
**The attribute 'Publisher' with value 'CN=Awesome,Apps-Inc' failed to parse.**
答案 3 :(得分:0)
以上都不适合我。
我试着围绕完整的公司名称加倍""
,终于工作了!
'CN=""NAME, INC.""'
在CN之前和结束之后忘记'
""