2

我正在尝试使用 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 清单验证失败:无法为“发布者”分配值“CN=Acme, Inc.” 原始错误:“使用“1”参数调用“SetPackageIdentityPublisher”的异常:“针对模式验证 AppxManifest.xml 失败并出现错误:在 XML (0) 中发现错误:“发布者”属性无效 - 值'CN=Acme, Inc.' 根据其数据类型“http://schemas.microsoft.com/appx/manifest/types:ST_Publisher_2010_v2”无效 - 模式约束失败。

这个:

-Publisher 'CN="Acme\`, Inc."'

结果是:

由于输入无效,Appx 清单验证失败:无法为“发布者”分配值“CN=Acme`, Inc.” 原始错误:“使用“1”参数调用“SetPackageIdentityPublisher”的异常:“针对模式验证 AppxManifest.xml 失败并出现错误:
在 XML (0) 中发现错误:“发布者”属性无效 - 值'CN=Acme`, Inc.' 根据其数据类型“http://schemas.microsoft.com/appx/manifest/types:ST_Publisher_2010_v2”无效 - 模式约束失败。

这个:

-Publisher "CN=Acme, Inc."

结果是:

由于输入无效,Appx 清单验证失败:无法为“发布者”分配值“CN=Acme, Inc.” 原始错误:“使用“1”参数调用“SetPackageIdentityPublisher”的异常:“针对模式验证 AppxManifest.xml 失败并出现错误:在 XML (0) 中发现错误:“发布者”属性无效 - 值'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.” 原始错误:“使用“1”参数调用“SetPackageIdentityPublisher”的异常:“针对模式验证 AppxManifest.xml 失败并出现错误:在 XML (0) 中发现错误:“发布者”属性无效 - 值'CN=Acme\, Inc.' 根据其数据类型“ http://schemas.microsoft.com/appx/manifest/types:ST_Publisher_2010_v2 ”无效 - 模式约束失败。

这很烦人,因为我们需要完美地设置发布者名称,否则之后签名将无法正常工作,因为它与我们的代码签名证书中的发布者名称不匹配。

这样做的正确方法是什么?

4

4 回答 4

0

不支持在桌面应用程序转换 (DAC) 的发布者参数中包含“逗号”。这是因为该值用于填充 Publisher 元素中的 Identity 节点AppxManifest.xml file(包含在 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.**

于 2017-02-15T22:55:26.013 回答
0

除了双引号之外,您还需要转义逗号。此外,请将 enire 通用名称放在单引号中而不是双引号中,这样您就不需要转义两次(对于 PowerShellActive Directory)。

... -Publisher 'CN=\"Acme\, Inc.\"' ...

有关在专有名称中转义字符的更多信息,请参阅Richard L. Mueller 的这篇文章。

于 2016-09-15T20:09:42.563 回答
0

以上都不适合我。""我在完整的公司名称周围尝试了双倍,它终于奏效了!

'CN=""NAME, INC.""'

不要忘记'CN之前和关闭之后""

于 2018-06-07T19:11:16.423 回答
0

根据有关 appxmanifest 的 Microsoft 文档,只要发布者名称用引号 (") 括起来,您就可以在发布者名称中包含逗号而不会出现问题:

https://msdn.microsoft.com/en-us/library/windows/apps/br211441.aspx

所以真正的问题是如何将带有引号的发布者名称传递给 AppConverter。

当像这样传递发布者时,解决方案似乎是用 \"\" 表示":

-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""\"\"'
于 2016-10-06T05:01:13.923 回答