我有一个MSIX应用程序正在管道中构建,但每次应用程序更新和启动时,它都会要求在调用某个http API时立即添加防火墙规则。
如果我转到防火墙并检查引用此应用程序的所有以前的规则,就会清楚为什么会发生这种情况。例如,我今天刚刚测试了大约20条规则,它们都和程序绑定在一起,看起来像这样:
C: \program files\windowsapps{guid*}{app_version**}{{another_uniqueIdentifier***}\MyApplication.exe
- (*)这是从清单中提取的->身份->名称
- (**)有一个powershell脚本,它使用管道中的内部版本号更新package.appxmanifest版本
- (***)我不知道这是从哪里来的
所以很明显,每次我构建新版本的应用程序时,它都会收到这个值,当我更新并运行它时,防火墙会认为它是一个新的应用程序。我怀疑这是故意的,因为在某些应用程序收到大量新更新的情况下,防火墙很快就会被防火墙规则堵塞。
我在这里缺少什么
我的应用程序(针对实际应用程序的*.wapproj)是从Azure DevOps管道构建的,这些是我使用的msbuild
参数:
/p:ApplicationVersion=$(Build.BuildNumber)
/p:Version=$(Build.BuildNumber)
/p:AllowUnsafeBlocks=true
/p:SelfContained=false
/p:AppxPackageSigningEnabled=true
/p:PackageCertificateThumbprint="$(Thumbprint)"
/p:AppxPackageSigningTimestampServerUrl="http://timestamp.digicert.com"
/p:AppxPackageSigningTimestampDigestAlgorithm="SHA256"
/p:AppInstallerUri="https://ourlocal.server.com/Clients/MyApplication/"
您应该能够通过在包.appxmanifest文件中添加以下条目来绕过防火墙规则:
<Extensions>
<desktop2:Extension Category="windows.firewallRules">
<desktop2:FirewallRules Executable="your-exe-name">
<desktop2:Rule Direction="out" IPProtocol="TCP" LocalPortMin="80" LocalPortMax="80" Profile="all"/>
其中desktop2在"Package"标记内声明为
xmlns:desktop2="http://schemas.microsoft.com/appx/manifest/desktop/windows10/2"
您可以添加多个规则,例如,如果您访问某些https,则可以为443添加另一个规则。