mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-01-19 18:47:16 +01:00
Compare commits
14 Commits
dev/vanzue
...
template-a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a0f35c4dac | ||
|
|
1fc14a2d95 | ||
|
|
9aab0f3893 | ||
|
|
91b7a99e76 | ||
|
|
d38edf798d | ||
|
|
17668047bf | ||
|
|
7b0b284d40 | ||
|
|
9aca6d136f | ||
|
|
437211b0e9 | ||
|
|
ca211be443 | ||
|
|
066c3247ed | ||
|
|
e87d1fefe6 | ||
|
|
e6d541ad7a | ||
|
|
a0a6f990e9 |
8
.github/actions/spell-check/expect.txt
vendored
8
.github/actions/spell-check/expect.txt
vendored
@@ -111,6 +111,7 @@ AUTORADIOBUTTON
|
||||
Autorun
|
||||
AUTOTICKS
|
||||
AUTOUPDATE
|
||||
autopf
|
||||
AValid
|
||||
AWAYMODE
|
||||
azcliversion
|
||||
@@ -267,6 +268,8 @@ CONFIGW
|
||||
CONFLICTINGMODIFIERKEY
|
||||
CONFLICTINGMODIFIERSHORTCUT
|
||||
CONOUT
|
||||
Contoso
|
||||
coreclr
|
||||
constexpr
|
||||
contentdialog
|
||||
contentfiles
|
||||
@@ -751,6 +754,7 @@ IFACEMETHOD
|
||||
IFACEMETHODIMP
|
||||
ifd
|
||||
IGNOREUNKNOWN
|
||||
ignoreversion
|
||||
IGo
|
||||
iid
|
||||
IIM
|
||||
@@ -777,6 +781,7 @@ INITDIALOG
|
||||
INITGUID
|
||||
INITTOLOGFONTSTRUCT
|
||||
INLINEPREFIX
|
||||
Inno
|
||||
inlines
|
||||
Inno
|
||||
INPC
|
||||
@@ -811,6 +816,7 @@ IPTC
|
||||
irow
|
||||
irprops
|
||||
isbi
|
||||
iscc
|
||||
isfinite
|
||||
iss
|
||||
issecret
|
||||
@@ -1443,6 +1449,7 @@ RECTDESTINATION
|
||||
rectp
|
||||
RECTSOURCE
|
||||
recyclebin
|
||||
recursesubdirs
|
||||
Redist
|
||||
Reencode
|
||||
REFCLSID
|
||||
@@ -1794,6 +1801,7 @@ TILEDWINDOW
|
||||
TILLSON
|
||||
timedate
|
||||
timediff
|
||||
timestamped
|
||||
timeunion
|
||||
timeutil
|
||||
TITLEBARINFO
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
Param(
|
||||
# Using the default value of 1.7 for winAppSdkVersionNumber and useExperimentalVersion as false
|
||||
[Parameter(Mandatory=$False,Position=1)]
|
||||
[string]$winAppSdkVersionNumber = "1.7",
|
||||
[string]$winAppSdkVersionNumber = "1.8",
|
||||
|
||||
# When the pipeline calls the PS1 file, the passed parameters are converted to string type
|
||||
[Parameter(Mandatory=$False,Position=2)]
|
||||
@@ -16,32 +16,7 @@ Param(
|
||||
[string]$sourceLink = "https://microsoft.pkgs.visualstudio.com/ProjectReunion/_packaging/Project.Reunion.nuget.internal/nuget/v3/index.json"
|
||||
)
|
||||
|
||||
function Update-NugetConfig {
|
||||
param (
|
||||
[string]$filePath = [System.IO.Path]::Combine($rootPath, "nuget.config")
|
||||
)
|
||||
|
||||
Write-Host "Updating nuget.config file"
|
||||
[xml]$xml = Get-Content -Path $filePath
|
||||
|
||||
# Add localpackages source into nuget.config
|
||||
$packageSourcesNode = $xml.configuration.packageSources
|
||||
$addNode = $xml.CreateElement("add")
|
||||
$addNode.SetAttribute("key", "localpackages")
|
||||
$addNode.SetAttribute("value", "localpackages")
|
||||
$packageSourcesNode.AppendChild($addNode) | Out-Null
|
||||
|
||||
# Remove <packageSourceMapping> tag and its content
|
||||
$packageSourceMappingNode = $xml.configuration.packageSourceMapping
|
||||
if ($packageSourceMappingNode) {
|
||||
$xml.configuration.RemoveChild($packageSourceMappingNode) | Out-Null
|
||||
}
|
||||
|
||||
# print nuget.config after modification
|
||||
$xml.OuterXml
|
||||
# Save the modified nuget.config file
|
||||
$xml.Save($filePath)
|
||||
}
|
||||
|
||||
function Read-FileWithEncoding {
|
||||
param (
|
||||
@@ -71,6 +46,132 @@ function Write-FileWithEncoding {
|
||||
$writer.Close()
|
||||
}
|
||||
|
||||
|
||||
function Add-NuGetSourceAndMapping {
|
||||
param (
|
||||
[xml]$Xml,
|
||||
[string]$Key,
|
||||
[string]$Value,
|
||||
[string[]]$Patterns
|
||||
)
|
||||
|
||||
# Ensure packageSources exists
|
||||
if (-not $Xml.configuration.packageSources) {
|
||||
$Xml.configuration.AppendChild($Xml.CreateElement("packageSources")) | Out-Null
|
||||
}
|
||||
$sources = $Xml.configuration.packageSources
|
||||
|
||||
# Add/Update Source
|
||||
$sourceNode = $sources.SelectSingleNode("add[@key='$Key']")
|
||||
if (-not $sourceNode) {
|
||||
$sourceNode = $Xml.CreateElement("add")
|
||||
$sourceNode.SetAttribute("key", $Key)
|
||||
$sources.AppendChild($sourceNode) | Out-Null
|
||||
}
|
||||
$sourceNode.SetAttribute("value", $Value)
|
||||
|
||||
# Ensure packageSourceMapping exists
|
||||
if (-not $Xml.configuration.packageSourceMapping) {
|
||||
$Xml.configuration.AppendChild($Xml.CreateElement("packageSourceMapping")) | Out-Null
|
||||
}
|
||||
$mapping = $Xml.configuration.packageSourceMapping
|
||||
|
||||
# Remove invalid packageSource nodes (missing key or empty key)
|
||||
$invalidNodes = $mapping.SelectNodes("packageSource[not(@key) or @key='']")
|
||||
if ($invalidNodes) {
|
||||
foreach ($node in $invalidNodes) {
|
||||
$mapping.RemoveChild($node) | Out-Null
|
||||
}
|
||||
}
|
||||
|
||||
# Add/Update Mapping Source
|
||||
$mappingSource = $mapping.SelectSingleNode("packageSource[@key='$Key']")
|
||||
if (-not $mappingSource) {
|
||||
$mappingSource = $Xml.CreateElement("packageSource")
|
||||
$mappingSource.SetAttribute("key", $Key)
|
||||
# Insert at top for priority
|
||||
if ($mapping.HasChildNodes) {
|
||||
$mapping.InsertBefore($mappingSource, $mapping.FirstChild) | Out-Null
|
||||
} else {
|
||||
$mapping.AppendChild($mappingSource) | Out-Null
|
||||
}
|
||||
}
|
||||
|
||||
# Double check and force attribute
|
||||
if (-not $mappingSource.HasAttribute("key")) {
|
||||
$mappingSource.SetAttribute("key", $Key)
|
||||
}
|
||||
|
||||
# Update Patterns
|
||||
# RemoveAll() removes all child nodes AND attributes, so we must re-set the key afterwards
|
||||
$mappingSource.RemoveAll()
|
||||
$mappingSource.SetAttribute("key", $Key)
|
||||
|
||||
foreach ($pattern in $Patterns) {
|
||||
$pkg = $Xml.CreateElement("package")
|
||||
$pkg.SetAttribute("pattern", $pattern)
|
||||
$mappingSource.AppendChild($pkg) | Out-Null
|
||||
}
|
||||
}
|
||||
|
||||
function Resolve-WinAppSdkSplitDependencies {
|
||||
Write-Host "Version $WinAppSDKVersion detected. Resolving split dependencies..."
|
||||
$installDir = Join-Path $rootPath "localpackages\output"
|
||||
New-Item -ItemType Directory -Path $installDir -Force | Out-Null
|
||||
|
||||
# Create a temporary nuget.config to avoid interference from the repo's config
|
||||
$tempConfig = Join-Path $env:TEMP "nuget_$(Get-Random).config"
|
||||
Set-Content -Path $tempConfig -Value "<?xml version='1.0' encoding='utf-8'?><configuration><packageSources><clear /><add key='TempSource' value='$sourceLink' /></packageSources></configuration>"
|
||||
|
||||
try {
|
||||
# Extract BuildTools version from Directory.Packages.props to ensure we have the required version
|
||||
$dirPackagesProps = Join-Path $rootPath "Directory.Packages.props"
|
||||
if (Test-Path $dirPackagesProps) {
|
||||
$propsContent = Get-Content $dirPackagesProps -Raw
|
||||
if ($propsContent -match '<PackageVersion Include="Microsoft.Windows.SDK.BuildTools" Version="([^"]+)"') {
|
||||
$buildToolsVersion = $Matches[1]
|
||||
Write-Host "Downloading Microsoft.Windows.SDK.BuildTools version $buildToolsVersion..."
|
||||
$nugetArgsBuildTools = "install Microsoft.Windows.SDK.BuildTools -Version $buildToolsVersion -ConfigFile $tempConfig -OutputDirectory $installDir -NonInteractive -NoCache"
|
||||
Invoke-Expression "nuget $nugetArgsBuildTools" | Out-Null
|
||||
}
|
||||
}
|
||||
|
||||
# Download package to inspect nuspec and keep it for the build
|
||||
$nugetArgs = "install Microsoft.WindowsAppSDK -Version $WinAppSDKVersion -ConfigFile $tempConfig -OutputDirectory $installDir -NonInteractive -NoCache"
|
||||
Invoke-Expression "nuget $nugetArgs" | Out-Null
|
||||
|
||||
# Parse dependencies from the installed folders
|
||||
# Folder structure is typically {PackageId}.{Version}
|
||||
$directories = Get-ChildItem -Path $installDir -Directory
|
||||
$allLocalPackages = @()
|
||||
foreach ($dir in $directories) {
|
||||
# Match any package pattern: PackageId.Version
|
||||
if ($dir.Name -match "^(.+?)\.(\d+\..*)$") {
|
||||
$pkgId = $Matches[1]
|
||||
$pkgVer = $Matches[2]
|
||||
$allLocalPackages += $pkgId
|
||||
|
||||
$packageVersions[$pkgId] = $pkgVer
|
||||
Write-Host "Found dependency: $pkgId = $pkgVer"
|
||||
}
|
||||
}
|
||||
|
||||
# Update repo's nuget.config to use localpackages
|
||||
$nugetConfig = Join-Path $rootPath "nuget.config"
|
||||
$configData = Read-FileWithEncoding -Path $nugetConfig
|
||||
[xml]$xml = $configData.Content
|
||||
|
||||
Add-NuGetSourceAndMapping -Xml $xml -Key "localpackages" -Value $installDir -Patterns $allLocalPackages
|
||||
|
||||
$xml.Save($nugetConfig)
|
||||
Write-Host "Updated nuget.config with localpackages mapping."
|
||||
} catch {
|
||||
Write-Warning "Failed to resolve dependencies: $_"
|
||||
} finally {
|
||||
Remove-Item $tempConfig -Force -ErrorAction SilentlyContinue
|
||||
}
|
||||
}
|
||||
|
||||
# Execute nuget list and capture the output
|
||||
if ($useExperimentalVersion) {
|
||||
# The nuget list for experimental versions will cost more time
|
||||
@@ -112,56 +213,36 @@ if ($latestVersion) {
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Update packages.config files
|
||||
Get-ChildItem -Path $rootPath -Recurse packages.config | ForEach-Object {
|
||||
$file = Read-FileWithEncoding -Path $_.FullName
|
||||
$content = $file.Content
|
||||
if ($content -match 'package id="Microsoft.WindowsAppSDK"') {
|
||||
$newVersionString = 'package id="Microsoft.WindowsAppSDK" version="' + $WinAppSDKVersion + '"'
|
||||
$oldVersionString = 'package id="Microsoft.WindowsAppSDK" version="[-.0-9a-zA-Z]*"'
|
||||
$content = $content -replace $oldVersionString, $newVersionString
|
||||
Write-FileWithEncoding -Path $_.FullName -Content $content -Encoding $file.encoding
|
||||
Write-Host "Modified " $_.FullName
|
||||
}
|
||||
}
|
||||
# Resolve dependencies for 1.8+
|
||||
$packageVersions = @{ "Microsoft.WindowsAppSDK" = $WinAppSDKVersion }
|
||||
|
||||
Resolve-WinAppSdkSplitDependencies
|
||||
|
||||
# Update Directory.Packages.props file
|
||||
Get-ChildItem -Path $rootPath -Recurse "Directory.Packages.props" | ForEach-Object {
|
||||
$file = Read-FileWithEncoding -Path $_.FullName
|
||||
$content = $file.Content
|
||||
if ($content -match '<PackageVersion Include="Microsoft.WindowsAppSDK"') {
|
||||
$newVersionString = '<PackageVersion Include="Microsoft.WindowsAppSDK" Version="' + $WinAppSDKVersion + '" />'
|
||||
$oldVersionString = '<PackageVersion Include="Microsoft.WindowsAppSDK" Version="[-.0-9a-zA-Z]*" />'
|
||||
$content = $content -replace $oldVersionString, $newVersionString
|
||||
$isModified = $false
|
||||
|
||||
foreach ($pkgId in $packageVersions.Keys) {
|
||||
$ver = $packageVersions[$pkgId]
|
||||
# Escape dots in package ID for regex
|
||||
$pkgIdRegex = $pkgId -replace '\.', '\.'
|
||||
|
||||
$newVersionString = "<PackageVersion Include=""$pkgId"" Version=""$ver"" />"
|
||||
$oldVersionString = "<PackageVersion Include=""$pkgIdRegex"" Version=""[-.0-9a-zA-Z]*"" />"
|
||||
|
||||
if ($content -match "<PackageVersion Include=""$pkgIdRegex""") {
|
||||
# Update existing package
|
||||
if ($content -notmatch [regex]::Escape($newVersionString)) {
|
||||
$content = $content -replace $oldVersionString, $newVersionString
|
||||
$isModified = $true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($isModified) {
|
||||
Write-FileWithEncoding -Path $_.FullName -Content $content -Encoding $file.encoding
|
||||
Write-Host "Modified " $_.FullName
|
||||
}
|
||||
}
|
||||
|
||||
# Update .vcxproj files
|
||||
Get-ChildItem -Path $rootPath -Recurse *.vcxproj | ForEach-Object {
|
||||
$file = Read-FileWithEncoding -Path $_.FullName
|
||||
$content = $file.Content
|
||||
if ($content -match '\\Microsoft.WindowsAppSDK.') {
|
||||
$newVersionString = '\Microsoft.WindowsAppSDK.' + $WinAppSDKVersion
|
||||
$oldVersionString = '\\Microsoft.WindowsAppSDK.(?=[-.0-9a-zA-Z]*\d)[-.0-9a-zA-Z]*' #positive lookahead for at least a digit
|
||||
$content = $content -replace $oldVersionString, $newVersionString
|
||||
Write-FileWithEncoding -Path $_.FullName -Content $content -Encoding $file.encoding
|
||||
Write-Host "Modified " $_.FullName
|
||||
}
|
||||
}
|
||||
|
||||
# Update .csproj files
|
||||
Get-ChildItem -Path $rootPath -Recurse *.csproj | ForEach-Object {
|
||||
$file = Read-FileWithEncoding -Path $_.FullName
|
||||
$content = $file.Content
|
||||
if ($content -match 'PackageReference Include="Microsoft.WindowsAppSDK"') {
|
||||
$newVersionString = 'PackageReference Include="Microsoft.WindowsAppSDK" Version="'+ $WinAppSDKVersion + '"'
|
||||
$oldVersionString = 'PackageReference Include="Microsoft.WindowsAppSDK" Version="[-.0-9a-zA-Z]*"'
|
||||
$content = $content -replace $oldVersionString, $newVersionString
|
||||
Write-FileWithEncoding -Path $_.FullName -Content $content -Encoding $file.encoding
|
||||
Write-Host "Modified " $_.FullName
|
||||
}
|
||||
}
|
||||
|
||||
Update-NugetConfig
|
||||
|
||||
@@ -19,7 +19,7 @@ parameters:
|
||||
- name: enableMsBuildCaching
|
||||
type: boolean
|
||||
displayName: "Enable MSBuild Caching"
|
||||
default: true
|
||||
default: false
|
||||
- name: runTests
|
||||
type: boolean
|
||||
displayName: "Run Tests"
|
||||
@@ -33,7 +33,7 @@ parameters:
|
||||
default: true
|
||||
- name: winAppSDKVersionNumber
|
||||
type: string
|
||||
default: 1.7
|
||||
default: 1.8
|
||||
- name: useExperimentalVersion
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
@@ -19,48 +19,20 @@ steps:
|
||||
-useExperimentalVersion $${{ parameters.useExperimentalVersion }}
|
||||
-rootPath "$(build.sourcesdirectory)"
|
||||
|
||||
- script: echo $(WinAppSDKVersion)
|
||||
displayName: 'Display WinAppSDK Version Found'
|
||||
# - task: NuGetCommand@2
|
||||
# displayName: 'Restore NuGet packages (slnx)'
|
||||
# inputs:
|
||||
# command: 'restore'
|
||||
# feedsToUse: 'config'
|
||||
# nugetConfigPath: '$(build.sourcesdirectory)\nuget.config'
|
||||
# restoreSolution: '$(build.sourcesdirectory)\**\*.slnx'
|
||||
# includeNuGetOrg: false
|
||||
|
||||
- task: DownloadPipelineArtifact@2
|
||||
displayName: 'Download WindowsAppSDK'
|
||||
inputs:
|
||||
buildType: 'specific'
|
||||
project: '55e8140e-57ac-4e5f-8f9c-c7c15b51929d'
|
||||
definition: '104083'
|
||||
buildVersionToDownload: 'latestFromBranch'
|
||||
branchName: 'refs/heads/release/${{ parameters.versionNumber }}-stable'
|
||||
artifactName: 'WindowsAppSDK_Nuget_And_MSIX'
|
||||
targetPath: '$(Build.SourcesDirectory)\localpackages'
|
||||
|
||||
- script: dir $(Build.SourcesDirectory)\localpackages\NugetPackages
|
||||
displayName: 'List downloaded packages'
|
||||
|
||||
- task: NuGetCommand@2
|
||||
displayName: 'Install WindowsAppSDK'
|
||||
inputs:
|
||||
command: 'custom'
|
||||
arguments: >
|
||||
install "Microsoft.WindowsAppSDK"
|
||||
-Source "$(Build.SourcesDirectory)\localpackages\NugetPackages"
|
||||
-Version "$(WinAppSDKVersion)"
|
||||
-OutputDirectory "$(Build.SourcesDirectory)\localpackages\output"
|
||||
-FallbackSource "https://microsoft.pkgs.visualstudio.com/ProjectReunion/_packaging/Project.Reunion.nuget.internal/nuget/v3/index.json"
|
||||
|
||||
- task: NuGetCommand@2
|
||||
displayName: 'Restore NuGet packages'
|
||||
- task: DotNetCoreCLI@2
|
||||
displayName: 'Restore NuGet packages (dotnet)'
|
||||
inputs:
|
||||
command: 'restore'
|
||||
projects: '$(build.sourcesdirectory)\**\*.slnx'
|
||||
feedsToUse: 'config'
|
||||
nugetConfigPath: '$(build.sourcesdirectory)\nuget.config'
|
||||
restoreSolution: '$(build.sourcesdirectory)\**\*.sln'
|
||||
includeNuGetOrg: false
|
||||
|
||||
- task: NuGetCommand@2
|
||||
displayName: 'Restore NuGet packages (slnx)'
|
||||
inputs:
|
||||
command: 'restore'
|
||||
feedsToUse: 'config'
|
||||
nugetConfigPath: '$(build.sourcesdirectory)\nuget.config'
|
||||
restoreSolution: '$(build.sourcesdirectory)\**\*.slnx'
|
||||
includeNuGetOrg: false
|
||||
workingDirectory: '$(build.sourcesdirectory)'
|
||||
|
||||
@@ -42,6 +42,11 @@
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup>
|
||||
<ClCompile>
|
||||
<!-- Make angle-bracket includes external and turn off code analysis for them -->
|
||||
<TreatAngleIncludeAsExternal>true</TreatAngleIncludeAsExternal>
|
||||
<ExternalWarningLevel>TurnOffAllWarnings</ExternalWarningLevel>
|
||||
<DisableAnalyzeExternal>true</DisableAnalyzeExternal>
|
||||
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<PrecompiledHeader Condition="'$(UsePrecompiledHeaders)' != 'false'">Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
@@ -53,15 +58,9 @@
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<LanguageStandard>stdcpplatest</LanguageStandard>
|
||||
<BuildStlModules>false</BuildStlModules>
|
||||
<!-- Use C++20 for test projects for modern features, latest for production -->
|
||||
<LanguageStandard Condition="$(MSBuildProjectName.ToLower().Contains('test'))">stdcpp20</LanguageStandard>
|
||||
<LanguageStandard Condition="!$(MSBuildProjectName.ToLower().Contains('test'))">stdcpplatest</LanguageStandard>
|
||||
<!-- Disable strict coroutine mode for test projects -->
|
||||
<UseStandardCoroutine Condition="!$(MSBuildProjectName.Contains('Test'))">true</UseStandardCoroutine>
|
||||
<AdditionalOptions Condition="!$(MSBuildProjectName.Contains('Test'))">/await:strict %(AdditionalOptions)</AdditionalOptions>
|
||||
<AdditionalOptions>/await %(AdditionalOptions)</AdditionalOptions>
|
||||
<!-- TODO: _SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING for compatibility with VS 17.8. Check if we can remove. -->
|
||||
<PreprocessorDefinitions Condition="!$(MSBuildProjectName.Contains('Test'))">_COROUTINE_ABI=2;_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="$(MSBuildProjectName.Contains('Test'))">_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<!-- CLR + CFG are not compatible >:{ -->
|
||||
<ControlFlowGuard Condition="'$(CLRSupport)' == ''">Guard</ControlFlowGuard>
|
||||
<DebugInformationFormat Condition="'%(ControlFlowGuard)' == 'Guard'">ProgramDatabase</DebugInformationFormat>
|
||||
@@ -110,21 +109,18 @@
|
||||
|
||||
<!-- Props that are constant for both Debug and Release configurations -->
|
||||
<PropertyGroup Label="Configuration">
|
||||
<PlatformToolset>v145</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)' == '17.0'">v143</PlatformToolset>
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<DesktopCompatible>true</DesktopCompatible>
|
||||
<SpectreMitigation>Spectre</SpectreMitigation>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Debug/Release props -->
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'"
|
||||
Label="Configuration">
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'"
|
||||
Label="Configuration">
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
|
||||
@@ -8,4 +8,20 @@
|
||||
<PropertyGroup Label="ManifestToolOverride">
|
||||
<ManifestTool Condition="Exists('$(WindowsSdkDir)bin\x64\mt.exe')">$(WindowsSdkDir)bin\x64\mt.exe</ManifestTool>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Auto-restore NuGet for native vcxproj (PackageReference) when building inside VS -->
|
||||
<Target Name="EnsureNuGetRestoreForVcxproj" BeforeTargets="PrepareForBuild" Condition="
|
||||
'$(BuildingInsideVisualStudio)' == 'true'
|
||||
and '$(DesignTimeBuild)' != 'true'
|
||||
and '$(RestoreInProgress)' != 'true'
|
||||
and '$(MSBuildProjectExtension)' == '.vcxproj'
|
||||
and '$(RestoreProjectStyle)' == 'PackageReference'
|
||||
and '$(MSBuildProjectExtensionsPath)' != ''
|
||||
and !Exists('$(MSBuildProjectExtensionsPath)project.assets.json')
|
||||
">
|
||||
|
||||
<Message Importance="normal" Text="NuGet assets missing for $(MSBuildProjectName); running Restore...; IntDir=$(IntDir); BaseIntermediateOutputPath=$(BaseIntermediateOutputPath)" />
|
||||
|
||||
<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="Restore" Properties="RestoreInProgress=true" BuildInParallel="false" />
|
||||
</Target>
|
||||
</Project>
|
||||
@@ -7,6 +7,8 @@
|
||||
<PackageVersion Include="AdaptiveCards.ObjectModel.WinUI3" Version="2.0.0-beta" />
|
||||
<PackageVersion Include="AdaptiveCards.Rendering.WinUI3" Version="2.1.0-beta" />
|
||||
<PackageVersion Include="AdaptiveCards.Templating" Version="2.0.5" />
|
||||
<PackageVersion Include="boost" Version="1.87.0" TargetFramework="native" />
|
||||
<PackageVersion Include="boost_regex-vc143" Version="1.87.0" TargetFramework="native" />
|
||||
<PackageVersion Include="CommunityToolkit.Labs.WinUI.Controls.OpacityMaskView" Version="0.1.251101-build.2372" />
|
||||
<PackageVersion Include="Microsoft.Bot.AdaptiveExpressions.Core" Version="4.23.0" />
|
||||
<PackageVersion Include="Appium.WebDriver" Version="4.4.5" />
|
||||
@@ -70,10 +72,12 @@
|
||||
This is present due to a bug in CsWinRT where WPF projects cause the analyzer to fail.
|
||||
-->
|
||||
<PackageVersion Include="Microsoft.Windows.CsWinRT" Version="2.2.0" />
|
||||
<PackageVersion Include="Microsoft.Windows.ImplementationLibrary" Version="1.0.231216.1"/>
|
||||
<PackageVersion Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.26100.6901" />
|
||||
<PackageVersion Include="Microsoft.WindowsAppSDK" Version="1.8.250907003" />
|
||||
<PackageVersion Include="Microsoft.WindowsAppSDK.AI" Version="1.8.37" />
|
||||
<PackageVersion Include="Microsoft.WindowsAppSDK.Runtime" Version="1.8.250907003" />
|
||||
<PackageVersion Include="Microsoft.WindowsAppSDK" Version="1.8.251106002" />
|
||||
<PackageVersion Include="Microsoft.WindowsAppSDK.Foundation" Version="1.8.251104000" />
|
||||
<PackageVersion Include="Microsoft.WindowsAppSDK.AI" Version="1.8.39" />
|
||||
<PackageVersion Include="Microsoft.WindowsAppSDK.Runtime" Version="1.8.251106002" />
|
||||
<PackageVersion Include="Microsoft.Xaml.Behaviors.WinUI.Managed" Version="2.0.9" />
|
||||
<PackageVersion Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.39" />
|
||||
<PackageVersion Include="ModernWpfUI" Version="0.9.4" />
|
||||
@@ -112,6 +116,7 @@
|
||||
<PackageVersion Include="System.IO.Abstractions.TestingHelpers" Version="22.0.13" />
|
||||
<PackageVersion Include="System.Management" Version="9.0.10" />
|
||||
<PackageVersion Include="System.Net.Http" Version="4.3.4" />
|
||||
<PackageVersion Include="System.Numerics.Tensors" Version="9.0.11" />
|
||||
<PackageVersion Include="System.Private.Uri" Version="4.3.2" />
|
||||
<PackageVersion Include="System.Reactive" Version="6.0.1" />
|
||||
<PackageVersion Include="System.Runtime.Caching" Version="9.0.10" />
|
||||
|
||||
@@ -14,13 +14,13 @@
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<Import Project="..\..\deps\spdlog.props" />
|
||||
@@ -88,7 +88,7 @@
|
||||
<ItemDefinitionGroup>
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>inc;..\..\src\;..\..\src\common\Telemetry;telemetry;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalOptions>/await:strict /Zc:twoPhase- /Wv:18 %(AdditionalOptions)</AdditionalOptions>
|
||||
<AdditionalOptions>/await /Zc:twoPhase- /Wv:18 %(AdditionalOptions)</AdditionalOptions>
|
||||
<WarningLevel>Level4</WarningLevel>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<Project>
|
||||
<Import Project="..\..\Directory.Build.props" />
|
||||
<Import Project="..\..\src\Version.props" Condition="Exists('..\..\src\Version.props')" />
|
||||
<PropertyGroup>
|
||||
<!-- Set BaseIntermediateOutputPath for each project to avoid conflicts -->
|
||||
<BaseIntermediateOutputPath Condition="'$(MSBuildProjectName)' == 'PowerToysInstallerVNext'">obj\Installer\</BaseIntermediateOutputPath>
|
||||
|
||||
@@ -37,14 +37,14 @@
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
@@ -68,10 +68,11 @@
|
||||
<ClCompile Include="SilentFilesInUseBAFunctions.cpp" />
|
||||
<ClCompile Include="bafunctions.cpp">
|
||||
<PrecompiledHeader>Create</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>precomp.h</PrecompiledHeaderFile>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="pch.h" />
|
||||
<ClInclude Include="precomp.h" />
|
||||
<ClInclude Include="resource.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
|
||||
|
||||
#include "pch.h"
|
||||
#include "precomp.h"
|
||||
#include "BalBaseBAFunctions.h"
|
||||
#include "BalBaseBAFunctionsProc.h"
|
||||
|
||||
@@ -18,6 +18,7 @@ public: // IBootstrapperApplication
|
||||
|
||||
BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "*** CUSTOM BA FUNCTION SYSTEM ACTIVE *** Running detect begin BA function. fCached=%d, registrationType=%d, cPackages=%u, fCancel=%d", fCached, registrationType, cPackages, *pfCancel);
|
||||
|
||||
LExit:
|
||||
return hr;
|
||||
}
|
||||
|
||||
@@ -36,6 +37,7 @@ public: // IBAFunctions
|
||||
// BalExitOnFailure(hr, "Change this message to represent real error handling.");
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
|
||||
LExit:
|
||||
return hr;
|
||||
}
|
||||
|
||||
@@ -56,7 +58,7 @@ public: // IBAFunctions
|
||||
__in DWORD cFiles,
|
||||
__in_ecount_z(cFiles) LPCWSTR* rgwzFiles,
|
||||
__in int nRecommendation,
|
||||
__in BOOTSTRAPPER_FILES_IN_USE_TYPE /* source */,
|
||||
__in BOOTSTRAPPER_FILES_IN_USE_TYPE source,
|
||||
__inout int* pResult
|
||||
)
|
||||
{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
|
||||
|
||||
#include "pch.h"
|
||||
#include "precomp.h"
|
||||
|
||||
static HINSTANCE vhInstance = NULL;
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="..\..\deps\expected.props" />
|
||||
<PropertyGroup>
|
||||
|
||||
@@ -55,26 +55,26 @@
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Utility</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Utility</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
|
||||
<ConfigurationType>Utility</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
|
||||
<ConfigurationType>Utility</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="..\..\deps\expected.props" />
|
||||
<PropertyGroup>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.240111.5\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.240111.5\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>16.0</VCProjectVersion>
|
||||
<ProjectGuid>{CABA8DFB-823B-4BF2-93AC-3F31984150D9}</ProjectGuid>
|
||||
@@ -11,7 +10,7 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
@@ -40,18 +39,5 @@
|
||||
<ClCompile Include="monitors.cpp" />
|
||||
<ClCompile Include="dpi_aware.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.240111.5\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.240111.5\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||
</ImportGroup>
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.240111.5\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.240111.5\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.240111.5\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.240111.5\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||
</Target>
|
||||
</Project>
|
||||
@@ -46,7 +46,7 @@ namespace DisplayUtils
|
||||
dpiUnawareThread.submit(OnThreadExecutor::task_t{ [&] {
|
||||
SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_UNAWARE);
|
||||
SetThreadDpiHostingBehavior(DPI_HOSTING_BEHAVIOR_MIXED);
|
||||
} }).get();
|
||||
} }).wait();
|
||||
|
||||
for (auto& monitorData : allMonitors)
|
||||
{
|
||||
@@ -59,7 +59,7 @@ namespace DisplayUtils
|
||||
{
|
||||
return;
|
||||
}
|
||||
} }).get();
|
||||
} }).wait();
|
||||
|
||||
UINT dpi = 0;
|
||||
if (DPIAware::GetScreenDPIForMonitor(monitorData.first, dpi) != S_OK)
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.240111.5" targetFramework="native" />
|
||||
</packages>
|
||||
@@ -19,7 +19,7 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
<DesktopCompatible>true</DesktopCompatible>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseOfMfc>false</UseOfMfc>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\tests\UnitTestsCommonLib\</OutDir>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<OutDir>..\..\..\$(Platform)\$(Configuration)\</OutDir>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
|
||||
@@ -18,7 +18,7 @@ namespace // Strings in this namespace should not be localized
|
||||
|
||||
namespace updating
|
||||
{
|
||||
winrt::Windows::Foundation::IAsyncOperation<bool> uninstall_previous_msix_version_async()
|
||||
std::future<bool> uninstall_previous_msix_version_async()
|
||||
{
|
||||
winrt::Windows::Management::Deployment::PackageManager package_manager;
|
||||
|
||||
|
||||
@@ -8,5 +8,5 @@
|
||||
|
||||
namespace updating
|
||||
{
|
||||
winrt::Windows::Foundation::IAsyncOperation<bool> uninstall_previous_msix_version_async();
|
||||
std::future<bool> uninstall_previous_msix_version_async();
|
||||
}
|
||||
@@ -88,78 +88,70 @@ namespace updating
|
||||
std::future<nonstd::expected<github_version_info, std::wstring>> get_github_version_info_async(const bool prerelease)
|
||||
#endif
|
||||
{
|
||||
return std::async(std::launch::async, [prerelease]() ->
|
||||
#if USE_STD_EXPECTED
|
||||
std::expected<github_version_info, std::wstring>
|
||||
#else
|
||||
nonstd::expected<github_version_info, std::wstring>
|
||||
#endif
|
||||
// If the current version starts with 0.0.*, it means we're on a local build from a farm and shouldn't check for updates.
|
||||
if constexpr (VERSION_MAJOR == 0 && VERSION_MINOR == 0)
|
||||
{
|
||||
// If the current version starts with 0.0.*, it means we're on a local build from a farm and shouldn't check for updates.
|
||||
if constexpr (VERSION_MAJOR == 0 && VERSION_MINOR == 0)
|
||||
{
|
||||
#if USE_STD_EXPECTED
|
||||
return std::unexpected(LOCAL_BUILD_ERROR);
|
||||
co_return std::unexpected(LOCAL_BUILD_ERROR);
|
||||
#else
|
||||
return nonstd::make_unexpected(LOCAL_BUILD_ERROR);
|
||||
co_return nonstd::make_unexpected(LOCAL_BUILD_ERROR);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
try
|
||||
try
|
||||
{
|
||||
http::HttpClient client;
|
||||
json::JsonObject release_object;
|
||||
const VersionHelper current_version(VERSION_MAJOR, VERSION_MINOR, VERSION_REVISION);
|
||||
VersionHelper github_version = current_version;
|
||||
|
||||
if (prerelease)
|
||||
{
|
||||
http::HttpClient client;
|
||||
json::JsonObject release_object;
|
||||
const VersionHelper current_version(VERSION_MAJOR, VERSION_MINOR, VERSION_REVISION);
|
||||
VersionHelper github_version = current_version;
|
||||
|
||||
if (prerelease)
|
||||
const auto body = co_await client.request(Uri{ ALL_RELEASES_ENDPOINT });
|
||||
for (const auto& json : json::JsonValue::Parse(body).GetArray())
|
||||
{
|
||||
const auto body = client.request(Uri{ ALL_RELEASES_ENDPOINT }).get();
|
||||
for (const auto& json : json::JsonValue::Parse(body).GetArray())
|
||||
auto potential_release_object = json.GetObjectW();
|
||||
const bool is_prerelease = potential_release_object.GetNamedBoolean(L"prerelease", false);
|
||||
auto extracted_version = extract_version_from_release_object(potential_release_object);
|
||||
if (!is_prerelease || !extracted_version || *extracted_version <= github_version)
|
||||
{
|
||||
auto potential_release_object = json.GetObjectW();
|
||||
const bool is_prerelease = potential_release_object.GetNamedBoolean(L"prerelease", false);
|
||||
auto extracted_version = extract_version_from_release_object(potential_release_object);
|
||||
if (!is_prerelease || !extracted_version || *extracted_version <= github_version)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
// Do not break, since https://developer.github.com/v3/repos/releases/#list-releases
|
||||
// doesn't specify the order in which release object appear
|
||||
github_version = std::move(*extracted_version);
|
||||
release_object = std::move(potential_release_object);
|
||||
continue;
|
||||
}
|
||||
// Do not break, since https://developer.github.com/v3/repos/releases/#list-releases
|
||||
// doesn't specify the order in which release object appear
|
||||
github_version = std::move(*extracted_version);
|
||||
release_object = std::move(potential_release_object);
|
||||
}
|
||||
else
|
||||
{
|
||||
const auto body = client.request(Uri{ LATEST_RELEASE_ENDPOINT }).get();
|
||||
release_object = json::JsonValue::Parse(body).GetObjectW();
|
||||
if (auto extracted_version = extract_version_from_release_object(release_object))
|
||||
{
|
||||
github_version = *extracted_version;
|
||||
}
|
||||
}
|
||||
|
||||
if (github_version <= current_version)
|
||||
{
|
||||
return version_up_to_date{};
|
||||
}
|
||||
|
||||
auto [installer_download_url, installer_filename] = extract_installer_asset_download_info(release_object);
|
||||
return new_version_download_info{ extract_release_page_url(release_object),
|
||||
std::move(github_version),
|
||||
std::move(installer_download_url),
|
||||
std::move(installer_filename) };
|
||||
}
|
||||
catch (...)
|
||||
else
|
||||
{
|
||||
const auto body = co_await client.request(Uri{ LATEST_RELEASE_ENDPOINT });
|
||||
release_object = json::JsonValue::Parse(body).GetObjectW();
|
||||
if (auto extracted_version = extract_version_from_release_object(release_object))
|
||||
{
|
||||
github_version = *extracted_version;
|
||||
}
|
||||
}
|
||||
|
||||
if (github_version <= current_version)
|
||||
{
|
||||
co_return version_up_to_date{};
|
||||
}
|
||||
|
||||
auto [installer_download_url, installer_filename] = extract_installer_asset_download_info(release_object);
|
||||
co_return new_version_download_info{ extract_release_page_url(release_object),
|
||||
std::move(github_version),
|
||||
std::move(installer_download_url),
|
||||
std::move(installer_filename) };
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
}
|
||||
#if USE_STD_EXPECTED
|
||||
return std::unexpected(NETWORK_ERROR);
|
||||
co_return std::unexpected(NETWORK_ERROR);
|
||||
#else
|
||||
return nonstd::make_unexpected(NETWORK_ERROR);
|
||||
co_return nonstd::make_unexpected(NETWORK_ERROR);
|
||||
#endif
|
||||
});
|
||||
}
|
||||
#pragma warning(pop)
|
||||
|
||||
@@ -180,32 +172,30 @@ namespace updating
|
||||
|
||||
std::future<std::optional<std::filesystem::path>> download_new_version(const new_version_download_info& new_version)
|
||||
{
|
||||
return std::async(std::launch::async, [new_version]() -> std::optional<std::filesystem::path> {
|
||||
auto installer_download_path = create_download_path();
|
||||
if (!installer_download_path)
|
||||
{
|
||||
return std::nullopt;
|
||||
}
|
||||
auto installer_download_path = create_download_path();
|
||||
if (!installer_download_path)
|
||||
{
|
||||
co_return std::nullopt;
|
||||
}
|
||||
|
||||
*installer_download_path /= new_version.installer_filename;
|
||||
*installer_download_path /= new_version.installer_filename;
|
||||
|
||||
bool download_success = false;
|
||||
for (size_t i = 0; i < MAX_DOWNLOAD_ATTEMPTS; ++i)
|
||||
bool download_success = false;
|
||||
for (size_t i = 0; i < MAX_DOWNLOAD_ATTEMPTS; ++i)
|
||||
{
|
||||
try
|
||||
{
|
||||
try
|
||||
{
|
||||
http::HttpClient client;
|
||||
client.download(new_version.installer_download_url, *installer_download_path).get();
|
||||
download_success = true;
|
||||
break;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
// reattempt to download or do nothing
|
||||
}
|
||||
http::HttpClient client;
|
||||
co_await client.download(new_version.installer_download_url, *installer_download_path);
|
||||
download_success = true;
|
||||
break;
|
||||
}
|
||||
return download_success ? installer_download_path : std::nullopt;
|
||||
});
|
||||
catch (...)
|
||||
{
|
||||
// reattempt to download or do nothing
|
||||
}
|
||||
}
|
||||
co_return download_success ? installer_download_path : std::nullopt;
|
||||
}
|
||||
|
||||
void cleanup_updates()
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<Import Project="..\..\..\deps\expected.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<Import Project="..\..\..\deps\spdlog.props" />
|
||||
|
||||
@@ -21,15 +21,15 @@ namespace http
|
||||
headers.UserAgent().TryParseAdd(USER_AGENT);
|
||||
}
|
||||
|
||||
winrt::Windows::Foundation::IAsyncOperation<winrt::hstring> request(const winrt::Windows::Foundation::Uri& url)
|
||||
std::future<std::wstring> request(const winrt::Windows::Foundation::Uri& url)
|
||||
{
|
||||
auto response = co_await m_client.GetAsync(url);
|
||||
(void)response.EnsureSuccessStatusCode();
|
||||
auto body = co_await response.Content().ReadAsStringAsync();
|
||||
co_return body;
|
||||
co_return std::wstring(body);
|
||||
}
|
||||
|
||||
winrt::Windows::Foundation::IAsyncAction download(const winrt::Windows::Foundation::Uri& url, const std::wstring& dstFilePath)
|
||||
std::future<void> download(const winrt::Windows::Foundation::Uri& url, const std::wstring& dstFilePath)
|
||||
{
|
||||
auto response = co_await m_client.GetAsync(url);
|
||||
(void)response.EnsureSuccessStatusCode();
|
||||
@@ -38,7 +38,7 @@ namespace http
|
||||
file_stream.Close();
|
||||
}
|
||||
|
||||
winrt::Windows::Foundation::IAsyncAction download(const winrt::Windows::Foundation::Uri& url, const std::wstring& dstFilePath, const std::function<void(float)>& progressUpdateCallback)
|
||||
std::future<void> download(const winrt::Windows::Foundation::Uri& url, const std::wstring& dstFilePath, const std::function<void(float)>& progressUpdateCallback)
|
||||
{
|
||||
auto response = co_await m_client.GetAsync(url, HttpCompletionOption::ResponseHeadersRead);
|
||||
response.EnsureSuccessStatusCode();
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
#include <functional>
|
||||
#include <queue>
|
||||
#include <atomic>
|
||||
#include <winrt/Windows.Foundation.h>
|
||||
|
||||
// OnThreadExecutor allows its caller to off-load some work to a persistently running background thread.
|
||||
// This might come in handy if you use the API which sets thread-wide global state and the state needs
|
||||
@@ -29,17 +28,13 @@ public:
|
||||
_worker_thread.join();
|
||||
}
|
||||
|
||||
winrt::Windows::Foundation::IAsyncAction submit(task_t task)
|
||||
std::future<void> submit(task_t task)
|
||||
{
|
||||
auto future = task.get_future();
|
||||
{
|
||||
std::lock_guard lock{ _task_mutex };
|
||||
_task_queue.emplace(std::move(task));
|
||||
_task_cv.notify_one();
|
||||
}
|
||||
|
||||
co_await winrt::resume_background();
|
||||
future.wait();
|
||||
std::lock_guard lock{ _task_mutex };
|
||||
_task_queue.emplace(std::move(task));
|
||||
_task_cv.notify_one();
|
||||
return future;
|
||||
}
|
||||
|
||||
void cancel()
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<OutDir>..\..\$(Platform)\$(Configuration)\</OutDir>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
|
||||
@@ -144,7 +144,7 @@ public sealed class AIServiceBatchIntegrationTests
|
||||
switch (format)
|
||||
{
|
||||
case PasteFormats.CustomTextTransformation:
|
||||
var transformResult = await services.CustomActionTransformService.TransformTextAsync(batchTestInput.Prompt, batchTestInput.Clipboard, CancellationToken.None, progress);
|
||||
var transformResult = await services.CustomActionTransformService.TransformAsync(batchTestInput.Prompt, batchTestInput.Clipboard, null, CancellationToken.None, progress);
|
||||
return DataPackageHelpers.CreateFromText(transformResult.Content ?? string.Empty);
|
||||
|
||||
case PasteFormats.KernelQuery:
|
||||
|
||||
@@ -225,6 +225,24 @@ internal static class DataPackageHelpers
|
||||
internal static async Task<string> GetHtmlContentAsync(this DataPackageView dataPackageView) =>
|
||||
dataPackageView.Contains(StandardDataFormats.Html) ? await dataPackageView.GetHtmlFormatAsync() : string.Empty;
|
||||
|
||||
internal static async Task<byte[]> GetImageAsPngBytesAsync(this DataPackageView dataPackageView)
|
||||
{
|
||||
var bitmap = await dataPackageView.GetImageContentAsync();
|
||||
if (bitmap == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
using var pngStream = new InMemoryRandomAccessStream();
|
||||
var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, pngStream);
|
||||
encoder.SetSoftwareBitmap(bitmap);
|
||||
await encoder.FlushAsync();
|
||||
|
||||
using var memoryStream = new MemoryStream();
|
||||
await pngStream.AsStreamForRead().CopyToAsync(memoryStream);
|
||||
return memoryStream.ToArray();
|
||||
}
|
||||
|
||||
internal static async Task<SoftwareBitmap> GetImageContentAsync(this DataPackageView dataPackageView)
|
||||
{
|
||||
using var stream = await dataPackageView.GetImageStreamAsync();
|
||||
|
||||
@@ -166,5 +166,8 @@ namespace AdvancedPaste.Helpers
|
||||
|
||||
[DllImport("Shlwapi.dll", SetLastError = true, CharSet = CharSet.Unicode)]
|
||||
internal static extern HResult AssocQueryString(AssocF flags, AssocStr str, string pszAssoc, string pszExtra, [Out] StringBuilder pszOut, [In][Out] ref uint pcchOut);
|
||||
|
||||
[DllImport("user32.dll", SetLastError = true)]
|
||||
internal static extern uint GetClipboardSequenceNumber();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ public enum PasteFormats
|
||||
CanPreview = true,
|
||||
SupportedClipboardFormats = ClipboardFormat.Image,
|
||||
IPCKey = AdvancedPasteAdditionalActions.PropertyNames.ImageToText,
|
||||
KernelFunctionDescription = "Takes an image in the clipboard and extracts all text from it using OCR.")]
|
||||
KernelFunctionDescription = "Takes an image from the clipboard and extracts text using OCR. This function is intended only for explicit text extraction or OCR requests.")]
|
||||
ImageToText,
|
||||
|
||||
[PasteFormatMetadata(
|
||||
@@ -118,8 +118,8 @@ public enum PasteFormats
|
||||
IconGlyph = "\uE945",
|
||||
RequiresAIService = true,
|
||||
CanPreview = true,
|
||||
SupportedClipboardFormats = ClipboardFormat.Text,
|
||||
KernelFunctionDescription = "Takes input instructions and transforms clipboard text (not TXT files) with these input instructions, putting the result back on the clipboard. This uses AI to accomplish the task.",
|
||||
SupportedClipboardFormats = ClipboardFormat.Text | ClipboardFormat.Image,
|
||||
KernelFunctionDescription = "Takes user instructions and applies them to the current clipboard content (text or image). Use this function for image analysis, description, or transformation tasks beyond simple OCR.",
|
||||
RequiresPrompt = true)]
|
||||
CustomTextTransformation,
|
||||
}
|
||||
|
||||
@@ -40,15 +40,15 @@ namespace AdvancedPaste.Services.CustomActions
|
||||
this.userSettings = userSettings;
|
||||
}
|
||||
|
||||
public async Task<CustomActionTransformResult> TransformTextAsync(string prompt, string inputText, CancellationToken cancellationToken, IProgress<double> progress)
|
||||
public async Task<CustomActionTransformResult> TransformAsync(string prompt, string inputText, byte[] imageBytes, CancellationToken cancellationToken, IProgress<double> progress)
|
||||
{
|
||||
var pasteConfig = userSettings?.PasteAIConfiguration;
|
||||
var providerConfig = BuildProviderConfig(pasteConfig);
|
||||
|
||||
return await TransformAsync(prompt, inputText, providerConfig, cancellationToken, progress);
|
||||
return await TransformAsync(prompt, inputText, imageBytes, providerConfig, cancellationToken, progress);
|
||||
}
|
||||
|
||||
private async Task<CustomActionTransformResult> TransformAsync(string prompt, string inputText, PasteAIConfig providerConfig, CancellationToken cancellationToken, IProgress<double> progress)
|
||||
private async Task<CustomActionTransformResult> TransformAsync(string prompt, string inputText, byte[] imageBytes, PasteAIConfig providerConfig, CancellationToken cancellationToken, IProgress<double> progress)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(providerConfig);
|
||||
|
||||
@@ -57,9 +57,9 @@ namespace AdvancedPaste.Services.CustomActions
|
||||
return new CustomActionTransformResult(string.Empty, AIServiceUsage.None);
|
||||
}
|
||||
|
||||
if (string.IsNullOrWhiteSpace(inputText))
|
||||
if (string.IsNullOrWhiteSpace(inputText) && imageBytes is null)
|
||||
{
|
||||
Logger.LogWarning("Clipboard has no usable text data");
|
||||
Logger.LogWarning("Clipboard has no usable data");
|
||||
return new CustomActionTransformResult(string.Empty, AIServiceUsage.None);
|
||||
}
|
||||
|
||||
@@ -80,6 +80,8 @@ namespace AdvancedPaste.Services.CustomActions
|
||||
{
|
||||
Prompt = prompt,
|
||||
InputText = inputText,
|
||||
ImageBytes = imageBytes,
|
||||
ImageMimeType = imageBytes != null ? "image/png" : null,
|
||||
SystemPrompt = systemPrompt,
|
||||
};
|
||||
|
||||
|
||||
@@ -12,6 +12,6 @@ namespace AdvancedPaste.Services.CustomActions
|
||||
{
|
||||
public interface ICustomActionTransformService
|
||||
{
|
||||
Task<CustomActionTransformResult> TransformTextAsync(string prompt, string inputText, CancellationToken cancellationToken, IProgress<double> progress);
|
||||
Task<CustomActionTransformResult> TransformAsync(string prompt, string inputText, byte[] imageBytes, CancellationToken cancellationToken, IProgress<double> progress);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,10 @@ namespace AdvancedPaste.Services.CustomActions
|
||||
|
||||
public string InputText { get; init; }
|
||||
|
||||
public byte[] ImageBytes { get; init; }
|
||||
|
||||
public string ImageMimeType { get; init; }
|
||||
|
||||
public string SystemPrompt { get; init; }
|
||||
|
||||
public AIServiceUsage Usage { get; set; } = AIServiceUsage.None;
|
||||
|
||||
@@ -64,21 +64,13 @@ namespace AdvancedPaste.Services.CustomActions
|
||||
|
||||
var prompt = request.Prompt;
|
||||
var inputText = request.InputText;
|
||||
if (string.IsNullOrWhiteSpace(prompt) || string.IsNullOrWhiteSpace(inputText))
|
||||
var imageBytes = request.ImageBytes;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(prompt) || (string.IsNullOrWhiteSpace(inputText) && imageBytes is null))
|
||||
{
|
||||
throw new ArgumentException("Prompt and input text must be provided", nameof(request));
|
||||
throw new ArgumentException("Prompt and input content must be provided", nameof(request));
|
||||
}
|
||||
|
||||
var userMessageContent = $"""
|
||||
User instructions:
|
||||
{prompt}
|
||||
|
||||
Clipboard Content:
|
||||
{inputText}
|
||||
|
||||
Output:
|
||||
""";
|
||||
|
||||
var executionSettings = CreateExecutionSettings();
|
||||
var kernel = CreateKernel();
|
||||
var modelId = _config.Model;
|
||||
@@ -102,7 +94,32 @@ namespace AdvancedPaste.Services.CustomActions
|
||||
|
||||
var chatHistory = new ChatHistory();
|
||||
chatHistory.AddSystemMessage(systemPrompt);
|
||||
chatHistory.AddUserMessage(userMessageContent);
|
||||
|
||||
if (imageBytes != null)
|
||||
{
|
||||
var collection = new ChatMessageContentItemCollection();
|
||||
if (!string.IsNullOrWhiteSpace(inputText))
|
||||
{
|
||||
collection.Add(new TextContent($"Clipboard Content:\n{inputText}"));
|
||||
}
|
||||
|
||||
collection.Add(new ImageContent(imageBytes, request.ImageMimeType ?? "image/png"));
|
||||
collection.Add(new TextContent($"User instructions:\n{prompt}\n\nOutput:"));
|
||||
chatHistory.AddUserMessage(collection);
|
||||
}
|
||||
else
|
||||
{
|
||||
var userMessageContent = $"""
|
||||
User instructions:
|
||||
{prompt}
|
||||
|
||||
Clipboard Content:
|
||||
{inputText}
|
||||
|
||||
Output:
|
||||
""";
|
||||
chatHistory.AddUserMessage(userMessageContent);
|
||||
}
|
||||
|
||||
var response = await chatService.GetChatMessageContentAsync(chatHistory, executionSettings, kernel, cancellationToken);
|
||||
chatHistory.Add(response);
|
||||
|
||||
@@ -67,12 +67,36 @@ public abstract class KernelServiceBase(
|
||||
|
||||
LogResult(cacheUsed, isSavedQuery, kernel.GetOrAddActionChain(), usage);
|
||||
|
||||
var outputPackage = kernel.GetDataPackage();
|
||||
var hasUsableData = await outputPackage.GetView().HasUsableDataAsync();
|
||||
|
||||
if (kernel.GetLastError() is Exception ex)
|
||||
{
|
||||
throw ex;
|
||||
// If we have an error, but the AI provided a final text response, we can ignore the error (likely a tool failure that the AI handled).
|
||||
// However, if we have usable data (e.g. from a successful tool call before the error?), we might want to keep it?
|
||||
// In the case of ImageToText failure, outputPackage is empty (new DataPackage), hasUsableData is false.
|
||||
// So we check if there is a valid response in the chat history.
|
||||
var lastMessage = chatHistory.LastOrDefault();
|
||||
bool hasAssistantResponse = lastMessage != null && lastMessage.Role == AuthorRole.Assistant && !string.IsNullOrEmpty(lastMessage.Content);
|
||||
|
||||
if (!hasAssistantResponse && !hasUsableData)
|
||||
{
|
||||
throw ex;
|
||||
}
|
||||
|
||||
// If we have a response or data, we log the error but proceed.
|
||||
Logger.LogWarning($"Kernel operation encountered an error but proceeded with available response/data: {ex.Message}");
|
||||
}
|
||||
|
||||
var outputPackage = kernel.GetDataPackage();
|
||||
if (!hasUsableData)
|
||||
{
|
||||
var lastMessage = chatHistory.LastOrDefault();
|
||||
if (lastMessage != null && lastMessage.Role == AuthorRole.Assistant && !string.IsNullOrEmpty(lastMessage.Content))
|
||||
{
|
||||
outputPackage = DataPackageHelpers.CreateFromText(lastMessage.Content);
|
||||
kernel.SetDataPackage(outputPackage);
|
||||
}
|
||||
}
|
||||
|
||||
if (!(await outputPackage.GetView().HasUsableDataAsync()))
|
||||
{
|
||||
@@ -148,7 +172,21 @@ public abstract class KernelServiceBase(
|
||||
var systemPrompt = string.IsNullOrWhiteSpace(runtimeConfig.SystemPrompt) ? DefaultSystemPrompt : runtimeConfig.SystemPrompt;
|
||||
chatHistory.AddSystemMessage(systemPrompt);
|
||||
chatHistory.AddSystemMessage($"Available clipboard formats: {await kernel.GetDataFormatsAsync()}");
|
||||
chatHistory.AddUserMessage(prompt);
|
||||
|
||||
var imageBytes = await kernel.GetDataPackageView().GetImageAsPngBytesAsync();
|
||||
if (imageBytes != null)
|
||||
{
|
||||
var collection = new ChatMessageContentItemCollection
|
||||
{
|
||||
new TextContent(prompt),
|
||||
new ImageContent(imageBytes, "image/png"),
|
||||
};
|
||||
chatHistory.AddUserMessage(collection);
|
||||
}
|
||||
else
|
||||
{
|
||||
chatHistory.AddUserMessage(prompt);
|
||||
}
|
||||
|
||||
if (ShouldModerateAdvancedAI())
|
||||
{
|
||||
@@ -302,8 +340,16 @@ public abstract class KernelServiceBase(
|
||||
new ActionChainItem(PasteFormats.CustomTextTransformation, Arguments: new() { { PromptParameterName, fixedPrompt } }),
|
||||
async dataPackageView =>
|
||||
{
|
||||
var input = await dataPackageView.GetClipboardTextOrThrowAsync(kernel.GetCancellationToken());
|
||||
var result = await _customActionTransformService.TransformTextAsync(fixedPrompt, input, kernel.GetCancellationToken(), kernel.GetProgress());
|
||||
var imageBytes = await dataPackageView.GetImageAsPngBytesAsync();
|
||||
var input = await dataPackageView.GetTextOrHtmlTextAsync();
|
||||
|
||||
if (string.IsNullOrEmpty(input) && imageBytes == null)
|
||||
{
|
||||
// If we have no text and no image, try to get text via OCR or throw if nothing exists
|
||||
input = await dataPackageView.GetClipboardTextOrThrowAsync(kernel.GetCancellationToken());
|
||||
}
|
||||
|
||||
var result = await _customActionTransformService.TransformAsync(fixedPrompt, input, imageBytes, kernel.GetCancellationToken(), kernel.GetProgress());
|
||||
return DataPackageHelpers.CreateFromText(result?.Content ?? string.Empty);
|
||||
});
|
||||
|
||||
@@ -313,15 +359,22 @@ public abstract class KernelServiceBase(
|
||||
new ActionChainItem(format, Arguments: new() { { PromptParameterName, prompt } }),
|
||||
async dataPackageView =>
|
||||
{
|
||||
var input = await dataPackageView.GetClipboardTextOrThrowAsync(kernel.GetCancellationToken());
|
||||
string output = await GetPromptBasedOutput(format, prompt, input, kernel.GetCancellationToken(), kernel.GetProgress());
|
||||
var imageBytes = await dataPackageView.GetImageAsPngBytesAsync();
|
||||
var input = await dataPackageView.GetTextOrHtmlTextAsync();
|
||||
|
||||
if (string.IsNullOrEmpty(input) && imageBytes == null)
|
||||
{
|
||||
input = await dataPackageView.GetClipboardTextOrThrowAsync(kernel.GetCancellationToken());
|
||||
}
|
||||
|
||||
string output = await GetPromptBasedOutput(format, prompt, input, imageBytes, kernel.GetCancellationToken(), kernel.GetProgress());
|
||||
return DataPackageHelpers.CreateFromText(output);
|
||||
});
|
||||
|
||||
private async Task<string> GetPromptBasedOutput(PasteFormats format, string prompt, string input, CancellationToken cancellationToken, IProgress<double> progress) =>
|
||||
private async Task<string> GetPromptBasedOutput(PasteFormats format, string prompt, string input, byte[] imageBytes, CancellationToken cancellationToken, IProgress<double> progress) =>
|
||||
format switch
|
||||
{
|
||||
PasteFormats.CustomTextTransformation => (await _customActionTransformService.TransformTextAsync(prompt, input, cancellationToken, progress))?.Content ?? string.Empty,
|
||||
PasteFormats.CustomTextTransformation => (await _customActionTransformService.TransformAsync(prompt, input, imageBytes, cancellationToken, progress))?.Content ?? string.Empty,
|
||||
_ => throw new ArgumentException($"Unsupported format {format} for prompt transform", nameof(format)),
|
||||
};
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ public sealed class PasteFormatExecutor(IKernelService kernelService, ICustomAct
|
||||
pasteFormat.Format switch
|
||||
{
|
||||
PasteFormats.KernelQuery => await _kernelService.TransformClipboardAsync(pasteFormat.Prompt, clipboardData, pasteFormat.IsSavedQuery, cancellationToken, progress),
|
||||
PasteFormats.CustomTextTransformation => DataPackageHelpers.CreateFromText((await _customActionTransformService.TransformTextAsync(pasteFormat.Prompt, await clipboardData.GetClipboardTextOrThrowAsync(cancellationToken), cancellationToken, progress))?.Content ?? string.Empty),
|
||||
PasteFormats.CustomTextTransformation => DataPackageHelpers.CreateFromText((await _customActionTransformService.TransformAsync(pasteFormat.Prompt, await clipboardData.GetTextOrHtmlTextAsync(), await clipboardData.GetImageAsPngBytesAsync(), cancellationToken, progress))?.Content ?? string.Empty),
|
||||
_ => await TransformHelpers.TransformAsync(format, clipboardData, cancellationToken, progress),
|
||||
});
|
||||
}
|
||||
|
||||
@@ -45,6 +45,7 @@ namespace AdvancedPaste.ViewModels
|
||||
private CancellationTokenSource _pasteActionCancellationTokenSource;
|
||||
|
||||
private string _currentClipboardHistoryId;
|
||||
private uint _lastClipboardSequenceNumber;
|
||||
private DateTimeOffset? _currentClipboardTimestamp;
|
||||
private ClipboardFormat _lastClipboardFormats = ClipboardFormat.None;
|
||||
private bool _clipboardHistoryUnavailableLogged;
|
||||
@@ -455,6 +456,7 @@ namespace AdvancedPaste.ViewModels
|
||||
{
|
||||
ResetClipboardPreview();
|
||||
_currentClipboardHistoryId = null;
|
||||
_lastClipboardSequenceNumber = 0;
|
||||
_currentClipboardTimestamp = null;
|
||||
_lastClipboardFormats = ClipboardFormat.None;
|
||||
return;
|
||||
@@ -477,6 +479,13 @@ namespace AdvancedPaste.ViewModels
|
||||
{
|
||||
bool clipboardChanged = formatsChanged;
|
||||
|
||||
var currentSequenceNumber = NativeMethods.GetClipboardSequenceNumber();
|
||||
if (_lastClipboardSequenceNumber != currentSequenceNumber)
|
||||
{
|
||||
clipboardChanged = true;
|
||||
_lastClipboardSequenceNumber = currentSequenceNumber;
|
||||
}
|
||||
|
||||
if (Clipboard.IsHistoryEnabled())
|
||||
{
|
||||
try
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)' == '16.0'">v142</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)' == '17.0'">v143</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)' == '18.0'">v143</PlatformToolset>
|
||||
|
||||
@@ -12,13 +12,13 @@
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -15,13 +15,13 @@
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -20,13 +20,13 @@
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -16,13 +16,13 @@
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -12,13 +12,13 @@
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -15,13 +15,13 @@
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -31,13 +31,13 @@
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.1.8.250907003\build\native\Microsoft.WindowsAppSDK.props" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.1.8.250907003\build\native\Microsoft.WindowsAppSDK.props')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.Base.1.8.250831001\build\native\Microsoft.WindowsAppSDK.Base.props" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.Base.1.8.250831001\build\native\Microsoft.WindowsAppSDK.Base.props')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.Foundation.1.8.250906002\build\native\Microsoft.WindowsAppSDK.Foundation.props" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.Foundation.1.8.250906002\build\native\Microsoft.WindowsAppSDK.Foundation.props')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.WinUI.1.8.250906003\build\native\Microsoft.WindowsAppSDK.WinUI.props" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.WinUI.1.8.250906003\build\native\Microsoft.WindowsAppSDK.WinUI.props')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.Runtime.1.8.250907003\build\native\Microsoft.WindowsAppSDK.Runtime.props" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.Runtime.1.8.250907003\build\native\Microsoft.WindowsAppSDK.Runtime.props')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.DWrite.1.8.25090401\build\Microsoft.WindowsAppSDK.DWrite.props" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.DWrite.1.8.25090401\build\Microsoft.WindowsAppSDK.DWrite.props')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.InteractiveExperiences.1.8.250906004\build\native\Microsoft.WindowsAppSDK.InteractiveExperiences.props" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.InteractiveExperiences.1.8.250906004\build\native\Microsoft.WindowsAppSDK.InteractiveExperiences.props')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.SDK.BuildTools.10.0.26100.4188\build\Microsoft.Windows.SDK.BuildTools.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.SDK.BuildTools.10.0.26100.4188\build\Microsoft.Windows.SDK.BuildTools.props')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.240111.5\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.240111.5\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||
<PropertyGroup Label="NuGet">
|
||||
<!-- Tell NuGet this is PackageReference style -->
|
||||
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
|
||||
|
||||
<!-- Tell NuGet we're a native project -->
|
||||
<NuGetTargetMoniker>native,Version=v0.0</NuGetTargetMoniker>
|
||||
|
||||
<!-- Tell NuGet we target Windows (use your existing WindowsTargetPlatformVersion) -->
|
||||
<NuGetTargetPlatformIdentifier>Windows</NuGetTargetPlatformIdentifier>
|
||||
<NuGetTargetPlatformVersion>$(WindowsTargetPlatformVersion)</NuGetTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<CppWinRTOptimized>true</CppWinRTOptimized>
|
||||
<CppWinRTRootNamespaceAutoMerge>true</CppWinRTRootNamespaceAutoMerge>
|
||||
@@ -31,6 +33,11 @@
|
||||
<WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>
|
||||
<EnablePreviewMsixTooling>true</EnablePreviewMsixTooling>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.WindowsAppSDK" GeneratePathProperty="true" />
|
||||
<PackageReference Include="Microsoft.Windows.CppWinRT" GeneratePathProperty="true" />
|
||||
<PackageReference Include="Microsoft.Windows.ImplementationLibrary" GeneratePathProperty="true" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
@@ -38,7 +45,6 @@
|
||||
<DesktopCompatible>true</DesktopCompatible>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<Import Project="..\..\..\..\deps\spdlog.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets">
|
||||
@@ -118,9 +124,6 @@
|
||||
<WarnAsError>true</WarnAsError>
|
||||
</Midl>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\..\common\Display\Display.vcxproj">
|
||||
<Project>{caba8dfb-823b-4bf2-93ac-3f31984150d9}</Project>
|
||||
@@ -142,42 +145,5 @@
|
||||
<ResourceCompile Include="PowerToys.MeasureToolCore.rc" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.240111.5\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.240111.5\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.231216.1\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.231216.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.SDK.BuildTools.10.0.26100.4188\build\Microsoft.Windows.SDK.BuildTools.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.SDK.BuildTools.10.0.26100.4188\build\Microsoft.Windows.SDK.BuildTools.targets')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.Web.WebView2.1.0.2903.40\build\native\Microsoft.Web.WebView2.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Web.WebView2.1.0.2903.40\build\native\Microsoft.Web.WebView2.targets')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.1.8.250907003\build\native\Microsoft.WindowsAppSDK.targets" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.1.8.250907003\build\native\Microsoft.WindowsAppSDK.targets')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.Base.1.8.250831001\build\native\Microsoft.WindowsAppSDK.Base.targets" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.Base.1.8.250831001\build\native\Microsoft.WindowsAppSDK.Base.targets')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.Foundation.1.8.250906002\build\native\Microsoft.WindowsAppSDK.Foundation.targets" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.Foundation.1.8.250906002\build\native\Microsoft.WindowsAppSDK.Foundation.targets')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.WinUI.1.8.250906003\build\native\Microsoft.WindowsAppSDK.WinUI.targets" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.WinUI.1.8.250906003\build\native\Microsoft.WindowsAppSDK.WinUI.targets')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.Runtime.1.8.250907003\build\native\Microsoft.WindowsAppSDK.Runtime.targets" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.Runtime.1.8.250907003\build\native\Microsoft.WindowsAppSDK.Runtime.targets')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.DWrite.1.8.25090401\build\Microsoft.WindowsAppSDK.DWrite.targets" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.DWrite.1.8.25090401\build\Microsoft.WindowsAppSDK.DWrite.targets')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.InteractiveExperiences.1.8.250906004\build\native\Microsoft.WindowsAppSDK.InteractiveExperiences.targets" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.InteractiveExperiences.1.8.250906004\build\native\Microsoft.WindowsAppSDK.InteractiveExperiences.targets')" />
|
||||
</ImportGroup>
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.240111.5\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.240111.5\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.240111.5\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.240111.5\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.231216.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.231216.1\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" />
|
||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.SDK.BuildTools.10.0.26100.4188\build\Microsoft.Windows.SDK.BuildTools.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.SDK.BuildTools.10.0.26100.4188\build\Microsoft.Windows.SDK.BuildTools.props'))" />
|
||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Windows.SDK.BuildTools.10.0.26100.4188\build\Microsoft.Windows.SDK.BuildTools.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Windows.SDK.BuildTools.10.0.26100.4188\build\Microsoft.Windows.SDK.BuildTools.targets'))" />
|
||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.Web.WebView2.1.0.2903.40\build\native\Microsoft.Web.WebView2.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.Web.WebView2.1.0.2903.40\build\native\Microsoft.Web.WebView2.targets'))" />
|
||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.1.8.250907003\build\native\Microsoft.WindowsAppSDK.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.WindowsAppSDK.1.8.250907003\build\native\Microsoft.WindowsAppSDK.props'))" />
|
||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.1.8.250907003\build\native\Microsoft.WindowsAppSDK.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.WindowsAppSDK.1.8.250907003\build\native\Microsoft.WindowsAppSDK.targets'))" />
|
||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.Base.1.8.250831001\build\native\Microsoft.WindowsAppSDK.Base.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.WindowsAppSDK.Base.1.8.250831001\build\native\Microsoft.WindowsAppSDK.Base.props'))" />
|
||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.Base.1.8.250831001\build\native\Microsoft.WindowsAppSDK.Base.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.WindowsAppSDK.Base.1.8.250831001\build\native\Microsoft.WindowsAppSDK.Base.targets'))" />
|
||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.Foundation.1.8.250906002\build\native\Microsoft.WindowsAppSDK.Foundation.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.WindowsAppSDK.Foundation.1.8.250906002\build\native\Microsoft.WindowsAppSDK.Foundation.props'))" />
|
||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.Foundation.1.8.250906002\build\native\Microsoft.WindowsAppSDK.Foundation.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.WindowsAppSDK.Foundation.1.8.250906002\build\native\Microsoft.WindowsAppSDK.Foundation.targets'))" />
|
||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.WinUI.1.8.250906003\build\native\Microsoft.WindowsAppSDK.WinUI.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.WindowsAppSDK.WinUI.1.8.250906003\build\native\Microsoft.WindowsAppSDK.WinUI.props'))" />
|
||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.WinUI.1.8.250906003\build\native\Microsoft.WindowsAppSDK.WinUI.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.WindowsAppSDK.WinUI.1.8.250906003\build\native\Microsoft.WindowsAppSDK.WinUI.targets'))" />
|
||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.Runtime.1.8.250907003\build\native\Microsoft.WindowsAppSDK.Runtime.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.WindowsAppSDK.Runtime.1.8.250907003\build\native\Microsoft.WindowsAppSDK.Runtime.props'))" />
|
||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.Runtime.1.8.250907003\build\native\Microsoft.WindowsAppSDK.Runtime.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.WindowsAppSDK.Runtime.1.8.250907003\build\native\Microsoft.WindowsAppSDK.Runtime.targets'))" />
|
||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.DWrite.1.8.25090401\build\Microsoft.WindowsAppSDK.DWrite.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.WindowsAppSDK.DWrite.1.8.25090401\build\Microsoft.WindowsAppSDK.DWrite.props'))" />
|
||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.DWrite.1.8.25090401\build\Microsoft.WindowsAppSDK.DWrite.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.WindowsAppSDK.DWrite.1.8.25090401\build\Microsoft.WindowsAppSDK.DWrite.targets'))" />
|
||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.InteractiveExperiences.1.8.250906004\build\native\Microsoft.WindowsAppSDK.InteractiveExperiences.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.WindowsAppSDK.InteractiveExperiences.1.8.250906004\build\native\Microsoft.WindowsAppSDK.InteractiveExperiences.props'))" />
|
||||
<Error Condition="!Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.InteractiveExperiences.1.8.250906004\build\native\Microsoft.WindowsAppSDK.InteractiveExperiences.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\packages\Microsoft.WindowsAppSDK.InteractiveExperiences.1.8.250906004\build\native\Microsoft.WindowsAppSDK.InteractiveExperiences.targets'))" />
|
||||
</Target>
|
||||
<Import Project="..\..\..\..\deps\spdlog.props" />
|
||||
</Project>
|
||||
@@ -1,17 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Microsoft.Web.WebView2" version="1.0.2903.40" targetFramework="native" />
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.240111.5" targetFramework="native" />
|
||||
<package id="Microsoft.Windows.ImplementationLibrary" version="1.0.231216.1" targetFramework="native" />
|
||||
<package id="Microsoft.Windows.SDK.BuildTools" version="10.0.26100.4188" targetFramework="native" />
|
||||
<package id="Microsoft.WindowsAppSDK" version="1.8.250907003" targetFramework="native" />
|
||||
<package id="Microsoft.WindowsAppSDK.Base" version="1.8.250831001" targetFramework="native" />
|
||||
<package id="Microsoft.WindowsAppSDK.Foundation" version="1.8.250906002" targetFramework="native" />
|
||||
<package id="Microsoft.WindowsAppSDK.WinUI" version="1.8.250906003" targetFramework="native" />
|
||||
<package id="Microsoft.WindowsAppSDK.Runtime" version="1.8.250907003" targetFramework="native" />
|
||||
<package id="Microsoft.WindowsAppSDK.DWrite" version="1.8.25090401" targetFramework="native" />
|
||||
<package id="Microsoft.WindowsAppSDK.InteractiveExperiences" version="1.8.250906004" targetFramework="native" />
|
||||
<package id="Microsoft.WindowsAppSDK.Widgets" version="1.8.250904007" targetFramework="native" />
|
||||
<package id="Microsoft.WindowsAppSDK.AI" version="1.8.37" targetFramework="native" />
|
||||
<package id="Microsoft.Windows.SDK.BuildTools.MSIX" version="1.7.20250829.1" targetFramework="native" />
|
||||
</packages>
|
||||
@@ -12,13 +12,13 @@
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -73,6 +73,13 @@
|
||||
<ProjectReference Include="..\..\..\common\interop\PowerToys.Interop.vcxproj" />
|
||||
<ProjectReference Include="..\..\..\common\ManagedCommon\ManagedCommon.csproj" />
|
||||
<ProjectReference Include="..\..\..\settings-ui\Settings.UI.Library\Settings.UI.Library.csproj" />
|
||||
<ProjectReference Include="..\MeasureToolCore\PowerToys.MeasureToolCore.vcxproj" />
|
||||
<ProjectReference Include="..\MeasureToolCore\PowerToys.MeasureToolCore.vcxproj">
|
||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||
<BuildProject>true</BuildProject>
|
||||
</ProjectReference>
|
||||
<CsWinRTInputs Include="$(OutputPath)\PowerToys.MeasureToolCore.winmd" />
|
||||
<None Include="$(OutputPath)\PowerToys.MeasureToolCore.dll">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@@ -13,13 +13,13 @@
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.1.8.250907003\build\native\Microsoft.WindowsAppSDK.props" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.1.8.250907003\build\native\Microsoft.WindowsAppSDK.props')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.Base.1.8.250831001\build\native\Microsoft.WindowsAppSDK.Base.props" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.Base.1.8.250831001\build\native\Microsoft.WindowsAppSDK.Base.props')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.Foundation.1.8.250906002\build\native\Microsoft.WindowsAppSDK.Foundation.props" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.Foundation.1.8.250906002\build\native\Microsoft.WindowsAppSDK.Foundation.props')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.WinUI.1.8.250906003\build\native\Microsoft.WindowsAppSDK.WinUI.props" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.WinUI.1.8.250906003\build\native\Microsoft.WindowsAppSDK.WinUI.props')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.Runtime.1.8.250907003\build\native\Microsoft.WindowsAppSDK.Runtime.props" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.Runtime.1.8.250907003\build\native\Microsoft.WindowsAppSDK.Runtime.props')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.DWrite.1.8.25090401\build\Microsoft.WindowsAppSDK.DWrite.props" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.DWrite.1.8.25090401\build\Microsoft.WindowsAppSDK.DWrite.props')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.InteractiveExperiences.1.8.250906004\build\native\Microsoft.WindowsAppSDK.InteractiveExperiences.props" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.InteractiveExperiences.1.8.250906004\build\native\Microsoft.WindowsAppSDK.InteractiveExperiences.props')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.240111.5\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.240111.5\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||
<PropertyGroup Label="NuGet">
|
||||
<!-- Tell NuGet this is PackageReference style -->
|
||||
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
|
||||
|
||||
<!-- Tell NuGet we're a native project -->
|
||||
<NuGetTargetMoniker>native,Version=v0.0</NuGetTargetMoniker>
|
||||
|
||||
<!-- Tell NuGet we target Windows (use your existing WindowsTargetPlatformVersion) -->
|
||||
<NuGetTargetPlatformIdentifier>Windows</NuGetTargetPlatformIdentifier>
|
||||
<NuGetTargetPlatformVersion>$(WindowsTargetPlatformVersion)</NuGetTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>15.0</VCProjectVersion>
|
||||
<ProjectGuid>{e94fd11c-0591-456f-899f-efc0ca548336}</ProjectGuid>
|
||||
@@ -20,20 +23,23 @@
|
||||
<WindowsAppSdkBootstrapInitialize>false</WindowsAppSdkBootstrapInitialize>
|
||||
<WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>
|
||||
<WindowsAppSDKVerifyTransitiveDependencies>false</WindowsAppSDKVerifyTransitiveDependencies>
|
||||
<!-- Force NuGet to treat this project strictly as packages.config style -->
|
||||
<RestoreProjectStyle>packages.config</RestoreProjectStyle>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.WindowsAppSDK" GeneratePathProperty="true"/>
|
||||
<PackageReference Include="Microsoft.WindowsAppSDK.Foundation" GeneratePathProperty="true"/>
|
||||
<PackageReference Include="Microsoft.Windows.CppWinRT" GeneratePathProperty="true"/>
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
@@ -127,18 +133,18 @@
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="FindMyMouse.rc" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<!-- Deduplicate WindowsAppRuntimeAutoInitializer.cpp (added twice via transitive imports causing LNK4042). Remove all then add exactly once. -->
|
||||
<ItemGroup Condition="'$(PkgMicrosoft_WindowsAppSDK)'!=''">
|
||||
<!-- Remove any transitive inclusion first -->
|
||||
<ClCompile Remove="$(PkgMicrosoft_WindowsAppSDK)\include\WindowsAppRuntimeAutoInitializer.cpp" />
|
||||
<!-- Re-add once, but disable PCH because the SDK file doesn't include our pch.h -->
|
||||
<ClCompile Include="$(PkgMicrosoft_WindowsAppSDK)\include\WindowsAppRuntimeAutoInitializer.cpp">
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<Target Name="FixWinAppSDKAutoInitializer" BeforeTargets="ClCompile" AfterTargets="WindowsAppRuntimeAutoInitializer">
|
||||
<ItemGroup>
|
||||
<!-- Remove ALL injected versions of the file -->
|
||||
<ClCompile Remove="@(ClCompile)" Condition="'%(Filename)' == 'WindowsAppRuntimeAutoInitializer'" />
|
||||
|
||||
<!-- Add ONE copy back manually -->
|
||||
<ClCompile Include="$(PkgMicrosoft_WindowsAppSDK_Foundation)\include\WindowsAppRuntimeAutoInitializer.cpp">
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Target>
|
||||
<Target Name="RemoveManagedWebView2CoreFromNativeOutDir" AfterTargets="Build">
|
||||
<ItemGroup>
|
||||
<_ToDelete Include="$(OutDir)Microsoft.Web.WebView2.Core.dll" />
|
||||
@@ -148,38 +154,4 @@
|
||||
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<Import Project="..\..\..\..\deps\spdlog.props" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.240111.5\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.240111.5\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.Web.WebView2.1.0.2903.40\build\native\Microsoft.Web.WebView2.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Web.WebView2.1.0.2903.40\build\native\Microsoft.Web.WebView2.targets')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.231216.1\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.ImplementationLibrary.1.0.231216.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.Windows.SDK.BuildTools.10.0.26100.4188\build\Microsoft.Windows.SDK.BuildTools.targets" Condition="Exists('..\..\..\..\packages\Microsoft.Windows.SDK.BuildTools.10.0.26100.4188\build\Microsoft.Windows.SDK.BuildTools.targets')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.1.8.250907003\build\native\Microsoft.WindowsAppSDK.targets" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.1.8.250907003\build\native\Microsoft.WindowsAppSDK.targets')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.Base.1.8.250831001\build\native\Microsoft.WindowsAppSDK.Base.targets" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.Base.1.8.250831001\build\native\Microsoft.WindowsAppSDK.Base.targets')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.Foundation.1.8.250906002\build\native\Microsoft.WindowsAppSDK.Foundation.targets" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.Foundation.1.8.250906002\build\native\Microsoft.WindowsAppSDK.Foundation.targets')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.WinUI.1.8.250906003\build\native\Microsoft.WindowsAppSDK.WinUI.targets" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.WinUI.1.8.250906003\build\native\Microsoft.WindowsAppSDK.WinUI.targets')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.Runtime.1.8.250907003\build\native\Microsoft.WindowsAppSDK.Runtime.targets" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.Runtime.1.8.250907003\build\native\Microsoft.WindowsAppSDK.Runtime.targets')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.DWrite.1.8.25090401\build\Microsoft.WindowsAppSDK.DWrite.targets" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.DWrite.1.8.25090401\build\Microsoft.WindowsAppSDK.DWrite.targets')" />
|
||||
<Import Project="..\..\..\..\packages\Microsoft.WindowsAppSDK.InteractiveExperiences.1.8.250906004\build\native\Microsoft.WindowsAppSDK.InteractiveExperiences.targets" Condition="Exists('..\..\..\..\packages\Microsoft.WindowsAppSDK.InteractiveExperiences.1.8.250906004\build\native\Microsoft.WindowsAppSDK.InteractiveExperiences.targets')" />
|
||||
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\\..\\..\\..\\packages\\Microsoft.Windows.CppWinRT.2.0.240111.5\\build\\native\\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\\..\\..\\..\\packages\\Microsoft.Windows.CppWinRT.2.0.240111.5\\build\\native\\Microsoft.Windows.CppWinRT.props'))" />
|
||||
<Error Condition="!Exists('..\\..\\..\\..\\packages\\Microsoft.Windows.CppWinRT.2.0.240111.5\\build\\native\\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\\..\\..\\..\\packages\\Microsoft.Windows.CppWinRT.2.0.240111.5\\build\\native\\Microsoft.Windows.CppWinRT.targets'))" />
|
||||
<Error Condition="!Exists('..\\..\\..\\..\\packages\\Microsoft.Web.WebView2.1.0.2903.40\\build\\native\\Microsoft.Web.WebView2.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\\..\\..\\..\\packages\\Microsoft.Web.WebView2.1.0.2903.40\\build\\native\\Microsoft.Web.WebView2.targets'))" />
|
||||
<Error Condition="!Exists('..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.1.8.250907003\\build\\native\\Microsoft.WindowsAppSDK.props')" Text="$([System.String]::Format('$(ErrorText)', '..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.1.8.250907003\\build\\native\\Microsoft.WindowsAppSDK.props'))" />
|
||||
<Error Condition="!Exists('..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.1.8.250907003\\build\\native\\Microsoft.WindowsAppSDK.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.1.8.250907003\\build\\native\\Microsoft.WindowsAppSDK.targets'))" />
|
||||
<Error Condition="!Exists('..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.Base.1.8.250831001\\build\\native\\Microsoft.WindowsAppSDK.Base.props')" Text="$([System.String]::Format('$(ErrorText)', '..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.Base.1.8.250831001\\build\\native\\Microsoft.WindowsAppSDK.Base.props'))" />
|
||||
<Error Condition="!Exists('..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.Base.1.8.250831001\\build\\native\\Microsoft.WindowsAppSDK.Base.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.Base.1.8.250831001\\build\\native\\Microsoft.WindowsAppSDK.Base.targets'))" />
|
||||
<Error Condition="!Exists('..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.Foundation.1.8.250906002\\build\\native\\Microsoft.WindowsAppSDK.Foundation.props')" Text="$([System.String]::Format('$(ErrorText)', '..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.Foundation.1.8.250906002\\build\\native\\Microsoft.WindowsAppSDK.Foundation.props'))" />
|
||||
<Error Condition="!Exists('..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.Foundation.1.8.250906002\\build\\native\\Microsoft.WindowsAppSDK.Foundation.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.Foundation.1.8.250906002\\build\\native\\Microsoft.WindowsAppSDK.Foundation.targets'))" />
|
||||
<Error Condition="!Exists('..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.WinUI.1.8.250906003\\build\\native\\Microsoft.WindowsAppSDK.WinUI.props')" Text="$([System.String]::Format('$(ErrorText)', '..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.WinUI.1.8.250906003\\build\\native\\Microsoft.WindowsAppSDK.WinUI.props'))" />
|
||||
<Error Condition="!Exists('..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.WinUI.1.8.250906003\\build\\native\\Microsoft.WindowsAppSDK.WinUI.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.WinUI.1.8.250906003\\build\\native\\Microsoft.WindowsAppSDK.WinUI.targets'))" />
|
||||
<Error Condition="!Exists('..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.Runtime.1.8.250907003\\build\\native\\Microsoft.WindowsAppSDK.Runtime.props')" Text="$([System.String]::Format('$(ErrorText)', '..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.Runtime.1.8.250907003\\build\\native\\Microsoft.WindowsAppSDK.Runtime.props'))" />
|
||||
<Error Condition="!Exists('..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.Runtime.1.8.250907003\\build\\native\\Microsoft.WindowsAppSDK.Runtime.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.Runtime.1.8.250907003\\build\\native\\Microsoft.WindowsAppSDK.Runtime.targets'))" />
|
||||
<Error Condition="!Exists('..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.DWrite.1.8.25090401\\build\\Microsoft.WindowsAppSDK.DWrite.props')" Text="$([System.String]::Format('$(ErrorText)', '..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.DWrite.1.8.25090401\\build\\Microsoft.WindowsAppSDK.DWrite.props'))" />
|
||||
<Error Condition="!Exists('..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.DWrite.1.8.25090401\\build\\Microsoft.WindowsAppSDK.DWrite.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.DWrite.1.8.25090401\\build\\Microsoft.WindowsAppSDK.DWrite.targets'))" />
|
||||
<Error Condition="!Exists('..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.InteractiveExperiences.1.8.250906004\\build\\native\\Microsoft.WindowsAppSDK.InteractiveExperiences.props')" Text="$([System.String]::Format('$(ErrorText)', '..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.InteractiveExperiences.1.8.250906004\\build\\native\\Microsoft.WindowsAppSDK.InteractiveExperiences.props'))" />
|
||||
<Error Condition="!Exists('..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.InteractiveExperiences.1.8.250906004\\build\\native\\Microsoft.WindowsAppSDK.InteractiveExperiences.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\\..\\..\\..\\packages\\Microsoft.WindowsAppSDK.InteractiveExperiences.1.8.250906004\\build\\native\\Microsoft.WindowsAppSDK.InteractiveExperiences.targets'))" />
|
||||
</Target>
|
||||
</Project>
|
||||
@@ -1,12 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.240111.5" targetFramework="native" />
|
||||
<package id="Microsoft.WindowsAppSDK" version="1.8.250907003" targetFramework="native" />
|
||||
<package id="Microsoft.WindowsAppSDK.Base" version="1.8.250831001" targetFramework="native" />
|
||||
<package id="Microsoft.WindowsAppSDK.Foundation" version="1.8.250906002" targetFramework="native" />
|
||||
<package id="Microsoft.WindowsAppSDK.WinUI" version="1.8.250906003" targetFramework="native" />
|
||||
<package id="Microsoft.WindowsAppSDK.Runtime" version="1.8.250907003" targetFramework="native" />
|
||||
<package id="Microsoft.WindowsAppSDK.DWrite" version="1.8.25090401" targetFramework="native" />
|
||||
<package id="Microsoft.WindowsAppSDK.InteractiveExperiences" version="1.8.250906004" targetFramework="native" />
|
||||
<package id="Microsoft.Web.WebView2" version="1.0.2903.40" targetFramework="native" />
|
||||
</packages>
|
||||
@@ -12,13 +12,13 @@
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -12,13 +12,13 @@
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -13,13 +13,13 @@
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="Configuration">
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
|
||||
|
||||
@@ -16,13 +16,13 @@
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)' == '15.0'">v141</PlatformToolset>
|
||||
<PlatformToolset Condition="'$(VisualStudioVersion)' == '16.0'">v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
|
||||
@@ -15,14 +15,14 @@
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<SpectreMitigation>Spectre</SpectreMitigation>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<SpectreMitigation>Spectre</SpectreMitigation>
|
||||
|
||||
@@ -35,7 +35,7 @@ LauncherUIHelper::~LauncherUIHelper()
|
||||
{
|
||||
Logger::error(L"Unable to find UI process: {}", get_last_error_or_default(GetLastError()));
|
||||
}
|
||||
} }).get();
|
||||
} }).wait();
|
||||
}
|
||||
|
||||
void LauncherUIHelper::LaunchUI()
|
||||
|
||||
@@ -60,7 +60,7 @@ void WindowArrangerHelper::Launch(const std::wstring& projectId, bool elevated,
|
||||
|
||||
Logger::trace(L"Finished waiting WorkspacesWindowArranger");
|
||||
CloseHandle(process);
|
||||
}}).get();
|
||||
}}).wait();
|
||||
|
||||
timeoutExpired = true;
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<ConformanceMode>false</ConformanceMode>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<LanguageStandard>stdcpplatest</LanguageStandard>
|
||||
<AdditionalOptions>/await:strict %(AdditionalOptions)</AdditionalOptions>
|
||||
<AdditionalOptions>/await %(AdditionalOptions)</AdditionalOptions>
|
||||
<PreprocessorDefinitions>_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
@@ -60,7 +60,7 @@
|
||||
<!-- Props that are constant for both Debug and Release configurations -->
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<SpectreMitigation>Spectre</SpectreMitigation>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="Configuration">
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<ConformanceMode>false</ConformanceMode>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<LanguageStandard>stdcpplatest</LanguageStandard>
|
||||
<AdditionalOptions>/await:strict %(AdditionalOptions)</AdditionalOptions>
|
||||
<AdditionalOptions>/await %(AdditionalOptions)</AdditionalOptions>
|
||||
<PreprocessorDefinitions>_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
@@ -60,7 +60,7 @@
|
||||
<!-- Props that are constant for both Debug and Release configurations -->
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<SpectreMitigation>Spectre</SpectreMitigation>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<ConformanceMode>false</ConformanceMode>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<LanguageStandard>stdcpplatest</LanguageStandard>
|
||||
<AdditionalOptions>/await:strict %(AdditionalOptions)</AdditionalOptions>
|
||||
<AdditionalOptions>/await %(AdditionalOptions)</AdditionalOptions>
|
||||
<PreprocessorDefinitions>_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
@@ -60,7 +60,7 @@
|
||||
<!-- Props that are constant for both Debug and Release configurations -->
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<SpectreMitigation>Spectre</SpectreMitigation>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -3222,7 +3222,7 @@ bool IsPenInverted( WPARAM wParam )
|
||||
// Captures the specified screen using the capture APIs
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
winrt::com_ptr<ID3D11Texture2D> CaptureScreenshotAsync(winrt::IDirect3DDevice const& device, winrt::GraphicsCaptureItem const& item, winrt::DirectXPixelFormat const& pixelFormat)
|
||||
std::future<winrt::com_ptr<ID3D11Texture2D>> CaptureScreenshotAsync(winrt::IDirect3DDevice const& device, winrt::GraphicsCaptureItem const& item, winrt::DirectXPixelFormat const& pixelFormat)
|
||||
{
|
||||
auto d3dDevice = GetDXGIInterfaceFromObject<ID3D11Device>(device);
|
||||
winrt::com_ptr<ID3D11DeviceContext> d3dContext;
|
||||
@@ -3251,7 +3251,7 @@ winrt::com_ptr<ID3D11Texture2D> CaptureScreenshotAsync(winrt::IDirect3DDevice co
|
||||
|
||||
session.IsCursorCaptureEnabled( false );
|
||||
session.StartCapture();
|
||||
captureEvent.wait();
|
||||
co_await winrt::resume_on_signal(captureEvent.get());
|
||||
|
||||
// End the capture
|
||||
session.Close();
|
||||
@@ -3260,7 +3260,7 @@ winrt::com_ptr<ID3D11Texture2D> CaptureScreenshotAsync(winrt::IDirect3DDevice co
|
||||
auto texture = GetDXGIInterfaceFromObject<ID3D11Texture2D>(frame.Surface());
|
||||
auto result = util::CopyD3DTexture(d3dDevice, texture, true);
|
||||
|
||||
return result;
|
||||
co_return result;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -3288,8 +3288,9 @@ winrt::com_ptr<ID3D11Texture2D>CaptureScreenshot(winrt::DirectXPixelFormat const
|
||||
auto item = util::CreateCaptureItemForMonitor(hMon);
|
||||
|
||||
auto capture = CaptureScreenshotAsync(device, item, pixelFormat);
|
||||
capture.wait();
|
||||
|
||||
return capture;
|
||||
return capture.get();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -12,13 +12,13 @@
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<ConformanceMode>false</ConformanceMode>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<LanguageStandard>stdcpplatest</LanguageStandard>
|
||||
<AdditionalOptions>/await:strict %(AdditionalOptions)</AdditionalOptions>
|
||||
<AdditionalOptions>/await %(AdditionalOptions)</AdditionalOptions>
|
||||
<PreprocessorDefinitions>_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
@@ -60,7 +60,7 @@
|
||||
<!-- Props that are constant for both Debug and Release configurations -->
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<SpectreMitigation>Spectre</SpectreMitigation>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<RootNamespace>Awake</RootNamespace>
|
||||
<ProjectName>AwakeModuleInterface</ProjectName>
|
||||
<TargetName>PowerToys.AwakeModuleInterface</TargetName>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<ProjectGuid>{0014d652-901f-4456-8d65-06fc5f997fb0}</ProjectGuid>
|
||||
<RootNamespace>CmdNotFoundModuleInterface</RootNamespace>
|
||||
<TargetName>PowerToys.CmdNotFoundModuleInterface</TargetName>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<ProjectName>CmdNotFoundModuleInterface</ProjectName>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
<GenerateManifest>false</GenerateManifest>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -15,13 +15,13 @@
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
|
||||
<PlatformToolset>v143</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -6,12 +6,12 @@
|
||||
<!-- For MVVM Toolkit Partial Properties/AOT support -->
|
||||
<LangVersion>preview</LangVersion>
|
||||
|
||||
<OutputPath>$(SolutionDir)$(Platform)\$(Configuration)\WinUI3Apps\CmdPal\</OutputPath>
|
||||
<OutputPath>..\..\..\$(Platform)\$(Configuration)\WinUI3Apps\CmdPal\</OutputPath>
|
||||
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
|
||||
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
|
||||
<!-- MRT from windows app sdk will search for a pri file with the same name of the module before defaulting to resources.pri -->
|
||||
<ProjectPriFileName>$(RootNamespace).pri</ProjectPriFileName>
|
||||
|
||||
|
||||
<!-- Disable SA1313 for Primary Constructor fields conflict https://learn.microsoft.com/dotnet/csharp/programming-guide/classes-and-structs/instance-constructors#primary-constructors -->
|
||||
<NoWarn>SA1313;</NoWarn>
|
||||
|
||||
@@ -42,5 +42,5 @@
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<Package
|
||||
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
|
||||
@@ -8,13 +8,19 @@
|
||||
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
|
||||
IgnorableNamespaces="uap uap3 rescap">
|
||||
|
||||
<!-- FOR PUBLISHING TO MICROSOFT STORE -->
|
||||
<!-- When you're ready to publish your extension to Microsoft Store,you'll need to
|
||||
change the values in the Identity & Properties tags below
|
||||
Name = replace with Microsoft Store's Package/Identity/Name
|
||||
Publisher = replace with Microsoft Store's Package/Identity/Publisher
|
||||
DisplayName = replace with the reserved name from Partner Center
|
||||
PublisherDisplayName = replace with Microsoft Store's Package/Properties/PublisherDisplayName
|
||||
Logo = Confirm that this image exist at the path
|
||||
-->
|
||||
<Identity
|
||||
Name="TemplateCmdPalExtension"
|
||||
Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US"
|
||||
Version="0.0.1.0" />
|
||||
<!-- When you're ready to publish your extension, you'll need to change the
|
||||
Publisher= to match your own identity -->
|
||||
|
||||
<Properties>
|
||||
<DisplayName>TemplateDisplayName</DisplayName>
|
||||
<PublisherDisplayName>A Lone Developer</PublisherDisplayName>
|
||||
|
||||
@@ -0,0 +1,129 @@
|
||||
# Publication Setup
|
||||
|
||||
This folder contains tools to help you prepare your CmdPal extension for publication to the Microsoft Store and WinGet.
|
||||
|
||||
## Files and Folders in this Directory
|
||||
|
||||
### Scripts
|
||||
|
||||
- **`one-time-store-publishing-setup.ps1`** - Configure your project for Microsoft Store publishing (run once)
|
||||
- **`build-msix-bundles.ps1`** - Build MSIX packages and create bundles for Store submission
|
||||
- **`one-time-winget-publishing-setup.ps1`** - Configure your project for WinGet publishing (run once)
|
||||
|
||||
### Resource Folders
|
||||
|
||||
- **`microsoft-store-resources/`** - Contains files used for Microsoft Store publishing:
|
||||
- `bundle_mapping.txt` - Auto-generated file that maps MSIX files for bundle creation
|
||||
|
||||
- **`winget-resources/`** - Contains templates and scripts for WinGet publishing:
|
||||
- `build-exe.ps1` - Script to build standalone EXE installer
|
||||
- `setup-template.iss` - Inno Setup installer template
|
||||
- `release-extension.yml` - GitHub Actions workflow template (moved to `.github/workflows/` during setup)
|
||||
- `Backups/` - Backup copies of configuration files (created during setup)
|
||||
|
||||
## Microsoft Store Quick Start
|
||||
|
||||
1. Open PowerShell and navigate to the Publication folder:
|
||||
|
||||
```powershell
|
||||
cd <YourProject>\Publication
|
||||
```
|
||||
|
||||
2. Run the one-time setup script:
|
||||
|
||||
```powershell
|
||||
.\one-time-store-publishing-setup.ps1
|
||||
```
|
||||
|
||||
3. Follow the prompts to enter your Microsoft Store information from Partner Center:
|
||||
- Package Identity Name
|
||||
- Publisher Certificate
|
||||
- Display Name
|
||||
- Publisher Display Name
|
||||
|
||||
The script will update your `Package.appxmanifest` with Store-specific values.
|
||||
|
||||
4. Once configured, build your bundle:
|
||||
|
||||
```powershell
|
||||
.\build-msix-bundles.ps1
|
||||
```
|
||||
|
||||
This script will:
|
||||
- Build x64 and ARM64 MSIX packages
|
||||
- Automatically update `microsoft-store-resources\bundle_mapping.txt` with correct paths
|
||||
- Create a combined MSIX bundle
|
||||
- Display the bundle location when complete
|
||||
|
||||
5. Upload the resulting `.msixbundle` file from `microsoft-store-resources\` to Partner Center
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### makeappx.exe not found
|
||||
|
||||
The build script requires the Windows SDK. Install it via:
|
||||
|
||||
- Visual Studio Installer (Individual Components → Windows SDK)
|
||||
- [Standalone Windows SDK](https://developer.microsoft.com/windows/downloads/windows-sdk/)
|
||||
|
||||
### Build errors
|
||||
|
||||
Ensure you have:
|
||||
|
||||
- .NET 9.0 SDK installed
|
||||
- Windows SDK 10.0.26100.0 or compatible version
|
||||
- No other instances of Visual Studio building the project
|
||||
|
||||
### Bundle creation fails
|
||||
|
||||
Check that:
|
||||
|
||||
- Both x64 and ARM64 builds completed successfully
|
||||
- `microsoft-store-resources\bundle_mapping.txt` paths are correct (auto-updated by script)
|
||||
- No file locks on the MSIX files
|
||||
|
||||
## WinGet Quick Start
|
||||
|
||||
1. Open PowerShell and navigate to the Publication folder:
|
||||
|
||||
```powershell
|
||||
cd <YourProject>\Publication
|
||||
```
|
||||
|
||||
2. Run the one-time setup script:
|
||||
|
||||
```powershell
|
||||
.\one-time-winget-publishing-setup.ps1
|
||||
```
|
||||
|
||||
3. Follow the prompts to enter:
|
||||
- GitHub Repository URL (where releases will be published)
|
||||
- Developer/Publisher Name
|
||||
|
||||
The script will:
|
||||
- Configure `winget-resources\build-exe.ps1` with your extension details
|
||||
- Configure `winget-resources\setup-template.iss` with your extension information
|
||||
- Move `release-extension.yml` to `.github\workflows\` in your repository root
|
||||
|
||||
4. Commit and push changes to GitHub:
|
||||
|
||||
```powershell
|
||||
git add .
|
||||
git commit -m "Configure extension for WinGet publishing"
|
||||
git push
|
||||
```
|
||||
|
||||
5. Trigger the GitHub Action to build and release:
|
||||
|
||||
```powershell
|
||||
gh workflow run release-extension.yml --ref main -f "release_notes=**First Release of <ExtensionName> Extension for Command Palette**
|
||||
|
||||
The inaugural release of the <ExtensionName> for Command Palette..."
|
||||
```
|
||||
|
||||
Or create a release manually through the GitHub web interface.
|
||||
|
||||
## Additional Resources
|
||||
|
||||
- [Command Palette Extension Publishing Documentation](https://learn.microsoft.com/en-us/windows/powertoys/command-palette/publish-extension)
|
||||
- [Microsoft Store Publishing Guide](https://learn.microsoft.com/windows/apps/publish/)
|
||||
@@ -0,0 +1,570 @@
|
||||
# Build MSIX Bundles Script for CmdPal Extension
|
||||
# This script automates the process of building MSIX packages for x64 and ARM64 architectures
|
||||
# and creating an MSIX bundle for distribution
|
||||
# Version: 1.0
|
||||
|
||||
#Requires -Version 5.1
|
||||
|
||||
# Enable strict mode for better error detection
|
||||
Set-StrictMode -Version Latest
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host " CmdPal Extension MSIX Builder" -ForegroundColor Cyan
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
# Determine project root (parent of Publication folder)
|
||||
$projectRoot = Split-Path -Parent $PSScriptRoot
|
||||
$projectName = Split-Path -Leaf $projectRoot
|
||||
|
||||
Write-Host "Project Configuration:" -ForegroundColor Yellow
|
||||
Write-Host " Project Root: $projectRoot" -ForegroundColor Gray
|
||||
Write-Host " Project Name: $projectName" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
|
||||
# Verify we're in the right location
|
||||
$csprojPath = Join-Path $projectRoot "$projectName.csproj"
|
||||
$manifestPath = Join-Path $projectRoot "Package.appxmanifest"
|
||||
|
||||
if (-not (Test-Path $csprojPath)) {
|
||||
Write-Host "ERROR: Could not find .csproj file at: $csprojPath" -ForegroundColor Red
|
||||
Write-Host ""
|
||||
Write-Host "This script must be run from the Publication folder within your project." -ForegroundColor Yellow
|
||||
Write-Host "Expected structure:" -ForegroundColor Gray
|
||||
Write-Host " <ProjectRoot>\" -ForegroundColor Gray
|
||||
Write-Host " <ProjectName>.csproj" -ForegroundColor Gray
|
||||
Write-Host " Publication\" -ForegroundColor Gray
|
||||
Write-Host " build-msix-bundles.ps1 (this script)" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
|
||||
if (-not (Test-Path $manifestPath)) {
|
||||
Write-Host "ERROR: Could not find Package.appxmanifest at: $manifestPath" -ForegroundColor Red
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Host " [OK] Project files validated" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
# Extract version from Package.appxmanifest
|
||||
Write-Host "Reading package information..." -ForegroundColor Cyan
|
||||
try {
|
||||
[xml]$manifest = Get-Content $manifestPath -ErrorAction Stop
|
||||
$packageName = $manifest.Package.Identity.Name
|
||||
$packageVersion = $manifest.Package.Identity.Version
|
||||
|
||||
Write-Host " Package Name: $packageName" -ForegroundColor White
|
||||
Write-Host " Version: $packageVersion" -ForegroundColor White
|
||||
Write-Host ""
|
||||
}
|
||||
catch {
|
||||
Write-Host "ERROR: Could not read Package.appxmanifest: $($_.Exception.Message)" -ForegroundColor Red
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Ask user what to build
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host " Build Options" -ForegroundColor Cyan
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "What would you like to build?" -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
Write-Host " [1] x64 MSIX only" -ForegroundColor White
|
||||
Write-Host " [2] ARM64 MSIX only" -ForegroundColor White
|
||||
Write-Host " [3] Complete Bundle (x64 + ARM64 + Bundle file)" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host "Enter your choice (1-3): " -ForegroundColor Yellow -NoNewline
|
||||
$buildChoice = Read-Host
|
||||
Write-Host ""
|
||||
|
||||
# Validate choice
|
||||
if ($buildChoice -notmatch '^[1-3]$') {
|
||||
Write-Host "ERROR: Invalid choice. Please enter 1, 2, or 3." -ForegroundColor Red
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Determine what to build
|
||||
$buildX64 = $false
|
||||
$buildARM64 = $false
|
||||
$createBundle = $false
|
||||
|
||||
switch ($buildChoice) {
|
||||
"1" {
|
||||
$buildX64 = $true
|
||||
Write-Host "Building: x64 MSIX only" -ForegroundColor Cyan
|
||||
}
|
||||
"2" {
|
||||
$buildARM64 = $true
|
||||
Write-Host "Building: ARM64 MSIX only" -ForegroundColor Cyan
|
||||
}
|
||||
"3" {
|
||||
$buildX64 = $true
|
||||
$buildARM64 = $true
|
||||
$createBundle = $true
|
||||
Write-Host "Building: Complete Bundle (x64 + ARM64 + Bundle)" -ForegroundColor Cyan
|
||||
}
|
||||
}
|
||||
Write-Host ""
|
||||
|
||||
# Clean previous builds (optional)
|
||||
Write-Host "Do you want to clean previous builds? (Y/N): " -ForegroundColor Yellow -NoNewline
|
||||
$cleanBuilds = Read-Host
|
||||
if ($cleanBuilds -match '^[Yy]') {
|
||||
Write-Host ""
|
||||
Write-Host "Cleaning previous builds..." -ForegroundColor Cyan
|
||||
|
||||
$appPackagesPath = Join-Path $projectRoot "AppPackages"
|
||||
if (Test-Path $appPackagesPath) {
|
||||
try {
|
||||
Remove-Item $appPackagesPath -Recurse -Force -ErrorAction Stop
|
||||
Write-Host " [OK] Cleaned AppPackages folder" -ForegroundColor Green
|
||||
}
|
||||
catch {
|
||||
Write-Host " [WARNING] Could not clean AppPackages: $($_.Exception.Message)" -ForegroundColor Yellow
|
||||
}
|
||||
}
|
||||
|
||||
# Clean old bundles in microsoft-store-resources folder
|
||||
$microsoftStoreResourcesPath = Join-Path $PSScriptRoot "microsoft-store-resources"
|
||||
if (Test-Path $microsoftStoreResourcesPath) {
|
||||
$oldBundles = Get-ChildItem $microsoftStoreResourcesPath -Filter "*.msixbundle" -ErrorAction SilentlyContinue
|
||||
if ($oldBundles) {
|
||||
foreach ($bundle in $oldBundles) {
|
||||
try {
|
||||
Remove-Item $bundle.FullName -Force -ErrorAction Stop
|
||||
Write-Host " [OK] Removed old bundle: $($bundle.Name)" -ForegroundColor Green
|
||||
}
|
||||
catch {
|
||||
Write-Host " [WARNING] Could not remove $($bundle.Name): $($_.Exception.Message)" -ForegroundColor Yellow
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
}
|
||||
else {
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
# Track built files for summary
|
||||
$builtFiles = @()
|
||||
$x64Msix = $null
|
||||
$arm64Msix = $null
|
||||
|
||||
# Build x64 MSIX (if requested)
|
||||
if ($buildX64) {
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host " Building x64 MSIX Package" -ForegroundColor Cyan
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "Running: dotnet build (x64)..." -ForegroundColor Yellow
|
||||
Write-Host "This may take a few seconds" -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
|
||||
Push-Location $projectRoot
|
||||
try {
|
||||
$buildOutput = & dotnet build --configuration Release -p:GenerateAppxPackageOnBuild=true -p:Platform=x64 -p:AppxPackageDir="AppPackages\x64\" 2>&1
|
||||
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
Write-Host ""
|
||||
Write-Host "ERROR: x64 build failed with exit code $LASTEXITCODE" -ForegroundColor Red
|
||||
Write-Host ""
|
||||
Write-Host "Build output:" -ForegroundColor Gray
|
||||
$buildOutput | ForEach-Object { Write-Host " $_" -ForegroundColor Gray }
|
||||
Write-Host ""
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
Pop-Location
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Host " [SUCCESS] x64 build completed" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
}
|
||||
catch {
|
||||
Write-Host ""
|
||||
Write-Host "ERROR: x64 build failed: $($_.Exception.Message)" -ForegroundColor Red
|
||||
Pop-Location
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
finally {
|
||||
Pop-Location
|
||||
}
|
||||
}
|
||||
|
||||
# Build ARM64 MSIX (if requested)
|
||||
if ($buildARM64) {
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host " Building ARM64 MSIX Package" -ForegroundColor Cyan
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "Running: dotnet build (ARM64)..." -ForegroundColor Yellow
|
||||
Write-Host "This may take a few seconds" -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
|
||||
Push-Location $projectRoot
|
||||
try {
|
||||
$buildOutput = & dotnet build --configuration Release -p:GenerateAppxPackageOnBuild=true -p:Platform=ARM64 -p:AppxPackageDir="AppPackages\ARM64\" 2>&1
|
||||
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
Write-Host ""
|
||||
Write-Host "ERROR: ARM64 build failed with exit code $LASTEXITCODE" -ForegroundColor Red
|
||||
Write-Host ""
|
||||
Write-Host "Build output:" -ForegroundColor Gray
|
||||
$buildOutput | ForEach-Object { Write-Host " $_" -ForegroundColor Gray }
|
||||
Write-Host ""
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
Pop-Location
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Host " [SUCCESS] ARM64 build completed" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
}
|
||||
catch {
|
||||
Write-Host ""
|
||||
Write-Host "ERROR: ARM64 build failed: $($_.Exception.Message)" -ForegroundColor Red
|
||||
Pop-Location
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
finally {
|
||||
Pop-Location
|
||||
}
|
||||
}
|
||||
|
||||
# Locate MSIX files (if bundle creation is needed or for summary)
|
||||
if ($createBundle -or $buildX64 -or $buildARM64) {
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host " Locating MSIX Files" -ForegroundColor Cyan
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
Push-Location $projectRoot
|
||||
try {
|
||||
$msixFiles = Get-ChildItem "AppPackages" -Recurse -Filter "*.msix" -ErrorAction SilentlyContinue
|
||||
|
||||
if (-not $msixFiles) {
|
||||
# Try alternate location
|
||||
Write-Host " MSIX files not found in AppPackages, checking bin folder..." -ForegroundColor Yellow
|
||||
$msixFiles = Get-ChildItem "bin" -Recurse -Filter "*.msix" -ErrorAction SilentlyContinue
|
||||
}
|
||||
|
||||
if ($buildX64 -and $buildARM64 -and $createBundle -and (-not $msixFiles -or $msixFiles.Count -lt 2)) {
|
||||
Write-Host "ERROR: Could not find both x64 and ARM64 MSIX files" -ForegroundColor Red
|
||||
Write-Host ""
|
||||
Write-Host "Expected files:" -ForegroundColor Gray
|
||||
Write-Host " - ${packageName}_${packageVersion}_x64.msix" -ForegroundColor Gray
|
||||
Write-Host " - ${packageName}_${packageVersion}_arm64.msix" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
|
||||
if ($msixFiles) {
|
||||
Write-Host "Found files:" -ForegroundColor Yellow
|
||||
$msixFiles | ForEach-Object { Write-Host " - $($_.FullName)" -ForegroundColor Gray }
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
Pop-Location
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
|
||||
if ($msixFiles) {
|
||||
Write-Host " Found MSIX files:" -ForegroundColor Green
|
||||
$msixFiles | ForEach-Object {
|
||||
$relativePath = $_.FullName -replace [regex]::Escape($projectRoot + "\"), ""
|
||||
Write-Host " [OK] $relativePath" -ForegroundColor White
|
||||
}
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
# Find specific x64 and ARM64 files
|
||||
if ($buildX64) {
|
||||
$x64Msix = $msixFiles | Where-Object { $_.Name -match "_x64\.msix$" } | Select-Object -First 1
|
||||
if ($x64Msix) {
|
||||
$builtFiles += $x64Msix.FullName
|
||||
}
|
||||
}
|
||||
|
||||
if ($buildARM64) {
|
||||
$arm64Msix = $msixFiles | Where-Object { $_.Name -match "_arm64\.msix$" } | Select-Object -First 1
|
||||
if ($arm64Msix) {
|
||||
$builtFiles += $arm64Msix.FullName
|
||||
}
|
||||
}
|
||||
|
||||
# Validate files for bundle creation
|
||||
if ($createBundle) {
|
||||
if (-not $x64Msix) {
|
||||
Write-Host "ERROR: Could not find x64 MSIX file" -ForegroundColor Red
|
||||
Pop-Location
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
|
||||
if (-not $arm64Msix) {
|
||||
Write-Host "ERROR: Could not find ARM64 MSIX file" -ForegroundColor Red
|
||||
Pop-Location
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
}
|
||||
finally {
|
||||
Pop-Location
|
||||
}
|
||||
}
|
||||
|
||||
# Create bundle (if requested)
|
||||
if ($createBundle) {
|
||||
# Update bundle_mapping.txt
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host " Updating bundle_mapping.txt" -ForegroundColor Cyan
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
$microsoftStoreResourcesPath = Join-Path $PSScriptRoot "microsoft-store-resources"
|
||||
$bundleMappingPath = Join-Path $microsoftStoreResourcesPath "bundle_mapping.txt"
|
||||
|
||||
# Ensure microsoft-store-resources directory exists
|
||||
if (-not (Test-Path $microsoftStoreResourcesPath)) {
|
||||
Write-Host " Creating microsoft-store-resources folder..." -ForegroundColor Yellow
|
||||
try {
|
||||
New-Item -Path $microsoftStoreResourcesPath -ItemType Directory -Force | Out-Null
|
||||
Write-Host " [OK] Folder created" -ForegroundColor Green
|
||||
}
|
||||
catch {
|
||||
Write-Host " [ERROR] Could not create folder: $($_.Exception.Message)" -ForegroundColor Red
|
||||
}
|
||||
}
|
||||
|
||||
# Get relative paths from project root
|
||||
$x64RelativePath = $x64Msix.FullName -replace [regex]::Escape($projectRoot + "\"), ""
|
||||
$arm64RelativePath = $arm64Msix.FullName -replace [regex]::Escape($projectRoot + "\"), ""
|
||||
|
||||
# Create bundle mapping content
|
||||
$line1 = "`"$x64RelativePath`" `"$($x64Msix.Name)`""
|
||||
$line2 = "`"$arm64RelativePath`" `"$($arm64Msix.Name)`""
|
||||
$bundleMappingContent = "[Files]`r`n$line1`r`n$line2"
|
||||
|
||||
try {
|
||||
Set-Content -Path $bundleMappingPath -Value $bundleMappingContent -NoNewline -ErrorAction Stop
|
||||
Write-Host " [SUCCESS] bundle_mapping.txt updated" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
Write-Host " Content:" -ForegroundColor Gray
|
||||
Write-Host " [Files]" -ForegroundColor DarkGray
|
||||
Write-Host (' "' + $x64RelativePath + '" "' + $x64Msix.Name + '"') -ForegroundColor DarkGray
|
||||
Write-Host (' "' + $arm64RelativePath + '" "' + $arm64Msix.Name + '"') -ForegroundColor DarkGray
|
||||
Write-Host ""
|
||||
}
|
||||
catch {
|
||||
Write-Host " [ERROR] Could not update bundle_mapping.txt: $($_.Exception.Message)" -ForegroundColor Red
|
||||
Write-Host " Continuing with bundle creation..." -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
# Find makeappx.exe
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host " Creating MSIX Bundle" -ForegroundColor Cyan
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
Write-Host "Locating makeappx.exe..." -ForegroundColor Yellow
|
||||
|
||||
$arch = switch ($env:PROCESSOR_ARCHITECTURE) {
|
||||
"AMD64" { "x64" }
|
||||
"x86" { "x86" }
|
||||
"ARM64" { "arm64" }
|
||||
default { "x64" }
|
||||
}
|
||||
|
||||
Write-Host " Detected architecture: $arch" -ForegroundColor Gray
|
||||
|
||||
$makeappxPath = Get-ChildItem "C:\Program Files (x86)\Windows Kits\10\bin\*\$arch\makeappx.exe" -ErrorAction SilentlyContinue |
|
||||
Sort-Object Name -Descending |
|
||||
Select-Object -First 1
|
||||
|
||||
if (-not $makeappxPath) {
|
||||
Write-Host ""
|
||||
Write-Host "ERROR: makeappx.exe not found" -ForegroundColor Red
|
||||
Write-Host ""
|
||||
Write-Host "makeappx.exe is part of the Windows SDK." -ForegroundColor Yellow
|
||||
Write-Host "Please install the Windows SDK from:" -ForegroundColor Yellow
|
||||
Write-Host " https://developer.microsoft.com/windows/downloads/windows-sdk/" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "Or ensure the Windows SDK is installed with Visual Studio." -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Host " [OK] Found: $($makeappxPath.FullName)" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
# Create bundle
|
||||
$bundleFileName = "${packageName}_${packageVersion}_Bundle.msixbundle"
|
||||
$bundleOutputPath = Join-Path $microsoftStoreResourcesPath $bundleFileName
|
||||
|
||||
Write-Host "Creating bundle: $bundleFileName" -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
|
||||
Push-Location $projectRoot
|
||||
try {
|
||||
# Use absolute path to bundle_mapping.txt
|
||||
$bundleMappingAbsolute = Join-Path $microsoftStoreResourcesPath "bundle_mapping.txt"
|
||||
|
||||
# Verify the mapping file exists
|
||||
if (-not (Test-Path $bundleMappingAbsolute)) {
|
||||
Write-Host "ERROR: bundle_mapping.txt not found at: $bundleMappingAbsolute" -ForegroundColor Red
|
||||
Pop-Location
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
|
||||
$makeappxArgs = @(
|
||||
"bundle",
|
||||
"/v",
|
||||
"/f", "`"$bundleMappingAbsolute`"",
|
||||
"/p", "`"$bundleOutputPath`""
|
||||
)
|
||||
|
||||
Write-Host " Running: makeappx bundle /v /f `"$bundleMappingAbsolute`" /p `"$bundleOutputPath`"" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
|
||||
# Run makeappx with proper quoting
|
||||
$bundleOutput = & $makeappxPath.FullName bundle /v /f $bundleMappingAbsolute /p $bundleOutputPath 2>&1
|
||||
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
Write-Host ""
|
||||
Write-Host "ERROR: Bundle creation failed with exit code $LASTEXITCODE" -ForegroundColor Red
|
||||
Write-Host ""
|
||||
Write-Host "Output:" -ForegroundColor Gray
|
||||
$bundleOutput | ForEach-Object { Write-Host " $_" -ForegroundColor Gray }
|
||||
Write-Host ""
|
||||
Pop-Location
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Host " [SUCCESS] Bundle created" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
}
|
||||
catch {
|
||||
Write-Host ""
|
||||
Write-Host "ERROR: Bundle creation failed: $($_.Exception.Message)" -ForegroundColor Red
|
||||
Pop-Location
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
finally {
|
||||
Pop-Location
|
||||
}
|
||||
|
||||
# Verify bundle was created
|
||||
if (-not (Test-Path $bundleOutputPath)) {
|
||||
Write-Host "ERROR: Bundle file was not created at expected location" -ForegroundColor Red
|
||||
Write-Host " Expected: $bundleOutputPath" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Add bundle to built files
|
||||
$builtFiles += $bundleOutputPath
|
||||
}
|
||||
|
||||
# Final Summary
|
||||
Write-Host "================================================================" -ForegroundColor Green
|
||||
Write-Host " BUILD COMPLETED SUCCESSFULLY!" -ForegroundColor Green
|
||||
Write-Host "================================================================" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
# Display what was built
|
||||
if ($buildChoice -eq "1") {
|
||||
Write-Host "Built: x64 MSIX Package" -ForegroundColor Cyan
|
||||
}
|
||||
elseif ($buildChoice -eq "2") {
|
||||
Write-Host "Built: ARM64 MSIX Package" -ForegroundColor Cyan
|
||||
}
|
||||
elseif ($buildChoice -eq "3") {
|
||||
Write-Host "Built: Complete Bundle (x64 + ARM64 + Bundle file)" -ForegroundColor Cyan
|
||||
}
|
||||
Write-Host ""
|
||||
|
||||
Write-Host "Package Information:" -ForegroundColor Yellow
|
||||
Write-Host " Name: $packageName" -ForegroundColor White
|
||||
Write-Host " Version: $packageVersion" -ForegroundColor White
|
||||
Write-Host ""
|
||||
|
||||
# Display built files
|
||||
Write-Host "Built Files:" -ForegroundColor Yellow
|
||||
if ($x64Msix) {
|
||||
$x64Size = "{0:N2} MB" -f ((Get-Item $x64Msix.FullName).Length / 1MB)
|
||||
Write-Host " [x64 MSIX]" -ForegroundColor Cyan
|
||||
Write-Host " Location: $($x64Msix.FullName)" -ForegroundColor White
|
||||
Write-Host " Size: $x64Size" -ForegroundColor White
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
if ($arm64Msix) {
|
||||
$arm64Size = "{0:N2} MB" -f ((Get-Item $arm64Msix.FullName).Length / 1MB)
|
||||
Write-Host " [ARM64 MSIX]" -ForegroundColor Cyan
|
||||
Write-Host " Location: $($arm64Msix.FullName)" -ForegroundColor White
|
||||
Write-Host " Size: $arm64Size" -ForegroundColor White
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
if ($createBundle -and (Test-Path $bundleOutputPath)) {
|
||||
$bundleSize = "{0:N2} MB" -f ((Get-Item $bundleOutputPath).Length / 1MB)
|
||||
Write-Host " [MSIX Bundle]" -ForegroundColor Cyan
|
||||
Write-Host " Location: $bundleOutputPath" -ForegroundColor White
|
||||
Write-Host " Size: $bundleSize" -ForegroundColor White
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
Write-Host "================================================================" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
# Display appropriate next steps based on what was built
|
||||
Write-Host "Next Steps:" -ForegroundColor Cyan
|
||||
if ($createBundle) {
|
||||
Write-Host " 1. Test the bundle by installing it locally" -ForegroundColor Gray
|
||||
Write-Host " 2. Upload the bundle to Microsoft Store Partner Center" -ForegroundColor Gray
|
||||
Write-Host " 3. Or distribute via other channels" -ForegroundColor Gray
|
||||
}
|
||||
else {
|
||||
Write-Host " 1. Test the MSIX package by installing it locally" -ForegroundColor Gray
|
||||
if ($buildX64) {
|
||||
Write-Host " 2. Build ARM64 package (option 2) or complete bundle (option 3)" -ForegroundColor Gray
|
||||
}
|
||||
else {
|
||||
Write-Host " 2. Build x64 package (option 1) or complete bundle (option 3)" -ForegroundColor Gray
|
||||
}
|
||||
Write-Host " 3. Or distribute this individual package" -ForegroundColor Gray
|
||||
}
|
||||
Write-Host ""
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
@@ -0,0 +1,3 @@
|
||||
[Files]
|
||||
"AppPackages\x64\TemplateCmdPalExtension_0.0.1.0_x64_Test\TemplateCmdPalExtension_0.0.1.0_x64.msix" "TemplateCmdPalExtension_0.0.1.0_x64.msix"
|
||||
"AppPackages\ARM64\TemplateCmdPalExtension_0.0.1.0_arm64_Test\TemplateCmdPalExtension_0.0.1.0_arm64.msix" "TemplateCmdPalExtension_0.0.1.0_arm64.msix"
|
||||
@@ -0,0 +1,829 @@
|
||||
# One-Time Publication Setup Script for CmdPal Extension
|
||||
# This script collects Microsoft Store publication information and updates project files
|
||||
# Version: 1.1
|
||||
|
||||
#Requires -Version 5.1
|
||||
|
||||
# Enable strict mode for better error detection
|
||||
Set-StrictMode -Version Latest
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host " Microsoft Store Publication Setup" -ForegroundColor Cyan
|
||||
Write-Host " CmdPal Extension Publisher" -ForegroundColor Cyan
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
# Path to the project files
|
||||
$projectRoot = Split-Path -Parent $PSScriptRoot
|
||||
$csprojPath = Join-Path $projectRoot "TemplateCmdPalExtension.csproj"
|
||||
$manifestPath = Join-Path $projectRoot "Package.appxmanifest"
|
||||
|
||||
Write-Host "Validating project structure..." -ForegroundColor Cyan
|
||||
Write-Host " Project Root: $projectRoot" -ForegroundColor Gray
|
||||
|
||||
# Verify files exist with detailed error messages
|
||||
if (-not (Test-Path $csprojPath)) {
|
||||
Write-Host ""
|
||||
Write-Host "ERROR: Could not find .csproj file" -ForegroundColor Red
|
||||
Write-Host " Expected location: $csprojPath" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
Write-Host "This script must be run from the Publication folder within your project." -ForegroundColor Yellow
|
||||
Write-Host "Please navigate to: <YourProject>\Publication\" -ForegroundColor Yellow
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
|
||||
if (-not (Test-Path $manifestPath)) {
|
||||
Write-Host ""
|
||||
Write-Host "ERROR: Could not find Package.appxmanifest file" -ForegroundColor Red
|
||||
Write-Host " Expected location: $manifestPath" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
Write-Host "Your project structure may be incomplete or corrupted." -ForegroundColor Yellow
|
||||
Write-Host "Please ensure Package.appxmanifest exists in your project root." -ForegroundColor Yellow
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Host " [OK] .csproj file found" -ForegroundColor Green
|
||||
Write-Host " [OK] Package.appxmanifest file found" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
# Create backup directory if it doesn't exist
|
||||
$backupDir = Join-Path $projectRoot "Publication\Backups"
|
||||
if (-not (Test-Path $backupDir)) {
|
||||
try {
|
||||
New-Item -Path $backupDir -ItemType Directory -Force | Out-Null
|
||||
Write-Host "Created backup directory: $backupDir" -ForegroundColor Gray
|
||||
}
|
||||
catch {
|
||||
Write-Host "WARNING: Could not create backup directory. Proceeding without backups." -ForegroundColor Yellow
|
||||
$backupDir = $null
|
||||
}
|
||||
}
|
||||
|
||||
# Create timestamped backups
|
||||
if ($backupDir) {
|
||||
$timestamp = Get-Date -Format "yyyyMMdd-HHmmss"
|
||||
try {
|
||||
Copy-Item $csprojPath -Destination (Join-Path $backupDir "TemplateCmdPalExtension.csproj.$timestamp.bak") -Force
|
||||
Copy-Item $manifestPath -Destination (Join-Path $backupDir "Package.appxmanifest.$timestamp.bak") -Force
|
||||
Write-Host "Backup created: $timestamp" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
}
|
||||
catch {
|
||||
Write-Host "WARNING: Could not create backup files. Proceeding anyway." -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host "This script will collect information needed to publish your extension" -ForegroundColor White
|
||||
Write-Host "to the Microsoft Store. You can find this information in your" -ForegroundColor White
|
||||
Write-Host "Microsoft Partner Center account." -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host "IMPORTANT: Have your Partner Center information ready before proceeding." -ForegroundColor Yellow
|
||||
Write-Host " - Package Identity Name" -ForegroundColor Gray
|
||||
Write-Host " - Publisher Certificate Name" -ForegroundColor Gray
|
||||
Write-Host " - Reserved App Name" -ForegroundColor Gray
|
||||
Write-Host " - Publisher Display Name" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
Write-Host "TIP: You can find this in Partner Center > Product Management > Product Identity" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
# Prompt to continue
|
||||
Write-Host "Do you want to continue? (Y/N): " -ForegroundColor Yellow -NoNewline
|
||||
$continue = Read-Host
|
||||
if ($continue -notmatch '^[Yy]') {
|
||||
Write-Host ""
|
||||
Write-Host "Setup cancelled by user." -ForegroundColor Yellow
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 0
|
||||
}
|
||||
Write-Host ""
|
||||
|
||||
# Function to validate package identity name format
|
||||
function Test-PackageIdentityName {
|
||||
param([string]$name)
|
||||
|
||||
# Package identity name rules:
|
||||
# - Between 3 and 50 characters
|
||||
# - Can contain: letters, numbers, periods, hyphens
|
||||
# - Cannot start/end with period
|
||||
# - Cannot have consecutive periods
|
||||
|
||||
if ([string]::IsNullOrWhiteSpace($name)) { return $false }
|
||||
if ($name.Length -lt 3 -or $name.Length -gt 50) { return $false }
|
||||
if ($name -match '^\.|\.$|\.\.') { return $false }
|
||||
if ($name -notmatch '^[a-zA-Z0-9.-]+$') { return $false }
|
||||
|
||||
return $true
|
||||
}
|
||||
|
||||
# Function to validate publisher certificate format
|
||||
function Test-PublisherFormat {
|
||||
param([string]$publisher)
|
||||
|
||||
if ([string]::IsNullOrWhiteSpace($publisher)) { return $false }
|
||||
|
||||
# Should start with CN= and follow distinguished name format
|
||||
if ($publisher -notmatch '^CN=.+') { return $false }
|
||||
|
||||
# Check for valid characters in DN
|
||||
if ($publisher -match '[<>]') { return $false }
|
||||
|
||||
return $true
|
||||
}
|
||||
|
||||
# Function to validate display name
|
||||
function Test-DisplayName {
|
||||
param([string]$name)
|
||||
|
||||
if ([string]::IsNullOrWhiteSpace($name)) { return $false }
|
||||
|
||||
# Display name should be reasonable length and not contain control characters
|
||||
if ($name.Length -lt 1 -or $name.Length -gt 256) { return $false }
|
||||
if ($name -match '[\x00-\x1F\x7F]') { return $false }
|
||||
|
||||
return $true
|
||||
}
|
||||
|
||||
# Collect Microsoft Store Package Identity Name
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host " Step 1: Package Identity Name" -ForegroundColor Cyan
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "Enter Microsoft Store Package/Identity/Name:" -ForegroundColor Yellow
|
||||
Write-Host " Location: Partner Center > Product Identity > Package/Identity/Name" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
Write-Host " Format Requirements:" -ForegroundColor Gray
|
||||
Write-Host " - 3-50 characters" -ForegroundColor DarkGray
|
||||
Write-Host " - Letters, numbers, periods, hyphens only" -ForegroundColor DarkGray
|
||||
Write-Host " - Cannot start/end with period or have consecutive periods" -ForegroundColor DarkGray
|
||||
Write-Host ""
|
||||
Write-Host " Example: Publisher.MyAwesomeExtension" -ForegroundColor DarkGray
|
||||
Write-Host ""
|
||||
|
||||
$packageIdentityName = ""
|
||||
$maxAttempts = 3
|
||||
$attempt = 0
|
||||
|
||||
do {
|
||||
$attempt++
|
||||
Write-Host "Package Identity Name" -NoNewline -ForegroundColor Yellow
|
||||
if ($attempt -gt 1) {
|
||||
Write-Host " (Attempt $attempt of $maxAttempts)" -NoNewline -ForegroundColor Red
|
||||
}
|
||||
Write-Host ": " -NoNewline -ForegroundColor Yellow
|
||||
$packageIdentityName = Read-Host
|
||||
|
||||
if ([string]::IsNullOrWhiteSpace($packageIdentityName)) {
|
||||
Write-Host " [ERROR] Package Identity Name cannot be empty." -ForegroundColor Red
|
||||
Write-Host ""
|
||||
}
|
||||
elseif (-not (Test-PackageIdentityName $packageIdentityName)) {
|
||||
Write-Host " [ERROR] Invalid Package Identity Name format." -ForegroundColor Red
|
||||
Write-Host " Please ensure it meets the format requirements listed above." -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
}
|
||||
else {
|
||||
Write-Host " [OK] Package Identity Name accepted: $packageIdentityName" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
break
|
||||
}
|
||||
|
||||
if ($attempt -ge $maxAttempts) {
|
||||
Write-Host ""
|
||||
Write-Host "Maximum attempts reached. Please verify your Partner Center information and try again." -ForegroundColor Red
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
} while ($true)
|
||||
|
||||
# Collect Microsoft Store Package Identity Publisher
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host " Step 2: Publisher Certificate" -ForegroundColor Cyan
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "Enter Microsoft Store Package/Identity/Publisher:" -ForegroundColor Yellow
|
||||
Write-Host " Location: Partner Center > Product Identity > Package/Identity/Publisher" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
Write-Host " Format Requirements:" -ForegroundColor Gray
|
||||
Write-Host " - Must start with 'CN=' (Certificate Name)" -ForegroundColor DarkGray
|
||||
Write-Host " - This is the publisher certificate distinguished name" -ForegroundColor DarkGray
|
||||
Write-Host ""
|
||||
Write-Host " Example: CN=12345678-1234-1234-1234-123456789012" -ForegroundColor DarkGray
|
||||
Write-Host " Example: CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" -ForegroundColor DarkGray
|
||||
Write-Host ""
|
||||
|
||||
$packageIdentityPublisher = ""
|
||||
$attempt = 0
|
||||
|
||||
do {
|
||||
$attempt++
|
||||
Write-Host "Publisher Certificate" -NoNewline -ForegroundColor Yellow
|
||||
if ($attempt -gt 1) {
|
||||
Write-Host " (Attempt $attempt of $maxAttempts)" -NoNewline -ForegroundColor Red
|
||||
}
|
||||
Write-Host ": " -NoNewline -ForegroundColor Yellow
|
||||
$packageIdentityPublisher = Read-Host
|
||||
|
||||
if ([string]::IsNullOrWhiteSpace($packageIdentityPublisher)) {
|
||||
Write-Host " [ERROR] Publisher cannot be empty." -ForegroundColor Red
|
||||
Write-Host ""
|
||||
}
|
||||
elseif (-not (Test-PublisherFormat $packageIdentityPublisher)) {
|
||||
if ($packageIdentityPublisher -notmatch '^CN=') {
|
||||
Write-Host " [ERROR] Publisher must start with 'CN='." -ForegroundColor Red
|
||||
Write-Host " Copy the entire string from Partner Center, including 'CN='." -ForegroundColor Yellow
|
||||
}
|
||||
else {
|
||||
Write-Host " [ERROR] Invalid publisher format." -ForegroundColor Red
|
||||
Write-Host " Please ensure you copied the complete certificate name from Partner Center." -ForegroundColor Yellow
|
||||
}
|
||||
Write-Host ""
|
||||
}
|
||||
else {
|
||||
Write-Host " [OK] Publisher certificate accepted" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
break
|
||||
}
|
||||
|
||||
if ($attempt -ge $maxAttempts) {
|
||||
Write-Host ""
|
||||
Write-Host "Maximum attempts reached. Please verify your Partner Center information and try again." -ForegroundColor Red
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
} while ($true)
|
||||
|
||||
# Collect Reserved Display Name
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host " Step 3: Display Name" -ForegroundColor Cyan
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "Enter the reserved Display Name from Partner Center:" -ForegroundColor Yellow
|
||||
Write-Host " Location: Partner Center > Product Management > Store Listing" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
Write-Host " This is the app name visible to users in the Microsoft Store." -ForegroundColor Gray
|
||||
Write-Host " It must match EXACTLY what you reserved in Partner Center." -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
Write-Host " Example: My Awesome CmdPal Extension" -ForegroundColor DarkGray
|
||||
Write-Host ""
|
||||
|
||||
$displayName = ""
|
||||
$attempt = 0
|
||||
|
||||
do {
|
||||
$attempt++
|
||||
Write-Host "Display Name" -NoNewline -ForegroundColor Yellow
|
||||
if ($attempt -gt 1) {
|
||||
Write-Host " (Attempt $attempt of $maxAttempts)" -NoNewline -ForegroundColor Red
|
||||
}
|
||||
Write-Host ": " -NoNewline -ForegroundColor Yellow
|
||||
$displayName = Read-Host
|
||||
|
||||
if ([string]::IsNullOrWhiteSpace($displayName)) {
|
||||
Write-Host " [ERROR] Display Name cannot be empty." -ForegroundColor Red
|
||||
Write-Host ""
|
||||
}
|
||||
elseif (-not (Test-DisplayName $displayName)) {
|
||||
Write-Host " [ERROR] Invalid Display Name." -ForegroundColor Red
|
||||
Write-Host " Display name must be 1-256 characters and cannot contain control characters." -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
}
|
||||
else {
|
||||
Write-Host " [OK] Display Name accepted: $displayName" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
break
|
||||
}
|
||||
|
||||
if ($attempt -ge $maxAttempts) {
|
||||
Write-Host ""
|
||||
Write-Host "Maximum attempts reached. Please try again with valid information." -ForegroundColor Red
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
} while ($true)
|
||||
|
||||
# Collect Publisher Display Name
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host " Step 4: Publisher Display Name" -ForegroundColor Cyan
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "Enter Microsoft Store Package/Properties/PublisherDisplayName:" -ForegroundColor Yellow
|
||||
Write-Host " Location: Partner Center > Product Identity > Package/Properties" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
Write-Host " This is your company or developer name shown to users." -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
Write-Host " Example: Contoso Software Inc." -ForegroundColor DarkGray
|
||||
Write-Host " Example: Jessica Cha" -ForegroundColor DarkGray
|
||||
Write-Host ""
|
||||
|
||||
$publisherDisplayName = ""
|
||||
$attempt = 0
|
||||
|
||||
do {
|
||||
$attempt++
|
||||
Write-Host "Publisher Display Name" -NoNewline -ForegroundColor Yellow
|
||||
if ($attempt -gt 1) {
|
||||
Write-Host " (Attempt $attempt of $maxAttempts)" -NoNewline -ForegroundColor Red
|
||||
}
|
||||
Write-Host ": " -NoNewline -ForegroundColor Yellow
|
||||
$publisherDisplayName = Read-Host
|
||||
|
||||
if ([string]::IsNullOrWhiteSpace($publisherDisplayName)) {
|
||||
Write-Host " [ERROR] Publisher Display Name cannot be empty." -ForegroundColor Red
|
||||
Write-Host ""
|
||||
}
|
||||
elseif (-not (Test-DisplayName $publisherDisplayName)) {
|
||||
Write-Host " [ERROR] Invalid Publisher Display Name." -ForegroundColor Red
|
||||
Write-Host " Publisher name must be 1-256 characters and cannot contain control characters." -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
}
|
||||
else {
|
||||
Write-Host " [OK] Publisher Display Name accepted: $publisherDisplayName" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
break
|
||||
}
|
||||
|
||||
if ($attempt -ge $maxAttempts) {
|
||||
Write-Host ""
|
||||
Write-Host "Maximum attempts reached. Please try again with valid information." -ForegroundColor Red
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
} while ($true)
|
||||
|
||||
# Check for required assets
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host " Step 5: Validating Required Assets" -ForegroundColor Cyan
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "Checking for Microsoft Store required asset images..." -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
|
||||
$assetsPath = Join-Path $projectRoot "Assets"
|
||||
|
||||
# Check if Assets folder exists
|
||||
if (-not (Test-Path $assetsPath)) {
|
||||
Write-Host " [ERROR] Assets folder not found at: $assetsPath" -ForegroundColor Red
|
||||
Write-Host ""
|
||||
Write-Host " Please create the Assets folder and add the required images." -ForegroundColor Yellow
|
||||
Write-Host " Press any key to continue anyway (you'll need to add assets later)..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
$requiredAssets = @(
|
||||
@{ Name = "StoreLogo.png"; Size = "50x50"; Description = "Store logo for listings" },
|
||||
@{ Name = "Square150x150Logo.scale-200.png"; Size = "300x300"; Description = "Medium tile" },
|
||||
@{ Name = "Square44x44Logo.scale-200.png"; Size = "88x88"; Description = "App list icon" },
|
||||
@{ Name = "Wide310x150Logo.scale-200.png"; Size = "620x300"; Description = "Wide tile" },
|
||||
@{ Name = "SplashScreen.scale-200.png"; Size = "1240x600"; Description = "Splash screen" },
|
||||
@{ Name = "StoreLogo.scale-100.png"; Size = "50x50"; Description = "Store logo (100% scale)" }
|
||||
)
|
||||
|
||||
$missingAssets = @()
|
||||
$foundAssets = @()
|
||||
|
||||
Write-Host " Asset Validation Results:" -ForegroundColor Cyan
|
||||
Write-Host " " -NoNewline
|
||||
Write-Host ("{0,-45} {1,-15} {2}" -f "File", "Size", "Status") -ForegroundColor Gray
|
||||
Write-Host " " -NoNewline
|
||||
Write-Host ("{0,-45} {1,-15} {2}" -f "----", "----", "------") -ForegroundColor DarkGray
|
||||
|
||||
foreach ($asset in $requiredAssets) {
|
||||
$assetPath = Join-Path $assetsPath $asset.Name
|
||||
$statusPrefix = " "
|
||||
|
||||
if (Test-Path $assetPath) {
|
||||
try {
|
||||
$fileInfo = Get-Item $assetPath
|
||||
$fileSize = "{0:N2} KB" -f ($fileInfo.Length / 1KB)
|
||||
|
||||
Write-Host " " -NoNewline
|
||||
Write-Host ("{0,-45} {1,-15} " -f $asset.Name, $asset.Size) -NoNewline -ForegroundColor White
|
||||
Write-Host "[OK]" -ForegroundColor Green
|
||||
|
||||
$foundAssets += $asset.Name
|
||||
}
|
||||
catch {
|
||||
Write-Host " " -NoNewline
|
||||
Write-Host ("{0,-45} {1,-15} " -f $asset.Name, $asset.Size) -NoNewline -ForegroundColor White
|
||||
Write-Host "[WARNING]" -ForegroundColor Yellow
|
||||
Write-Host " (File exists but couldn't read properties)" -ForegroundColor DarkGray
|
||||
$foundAssets += $asset.Name
|
||||
}
|
||||
}
|
||||
else {
|
||||
Write-Host " " -NoNewline
|
||||
Write-Host ("{0,-45} {1,-15} " -f $asset.Name, $asset.Size) -NoNewline -ForegroundColor White
|
||||
Write-Host "[MISSING]" -ForegroundColor Red
|
||||
Write-Host " ($($asset.Description))" -ForegroundColor DarkGray
|
||||
$missingAssets += $asset
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host " Summary: " -NoNewline -ForegroundColor Cyan
|
||||
Write-Host "$($foundAssets.Count) of $($requiredAssets.Count) assets found" -ForegroundColor White
|
||||
|
||||
# Auto-fix: Copy StoreLogo.scale-100.png to StoreLogo.png if needed
|
||||
$storeLogoPath = Join-Path $assetsPath "StoreLogo.png"
|
||||
$storeLogoScaledPath = Join-Path $assetsPath "StoreLogo.scale-100.png"
|
||||
|
||||
if (-not (Test-Path $storeLogoPath) -and (Test-Path $storeLogoScaledPath)) {
|
||||
Write-Host ""
|
||||
Write-Host " [AUTO-FIX] Creating StoreLogo.png from StoreLogo.scale-100.png..." -ForegroundColor Cyan
|
||||
try {
|
||||
Copy-Item $storeLogoScaledPath -Destination $storeLogoPath -Force -ErrorAction Stop
|
||||
Write-Host " [SUCCESS] StoreLogo.png created successfully" -ForegroundColor Green
|
||||
|
||||
# Update the missing/found counts
|
||||
$missingAssets = $missingAssets | Where-Object { $_.Name -ne "StoreLogo.png" }
|
||||
if ($foundAssets -notcontains "StoreLogo.png") {
|
||||
$foundAssets += "StoreLogo.png"
|
||||
}
|
||||
}
|
||||
catch {
|
||||
Write-Host " [ERROR] Could not copy file: $($_.Exception.Message)" -ForegroundColor Red
|
||||
}
|
||||
}
|
||||
|
||||
if ($missingAssets.Count -gt 0) {
|
||||
Write-Host ""
|
||||
Write-Host " [WARNING] $($missingAssets.Count) asset(s) missing" -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
Write-Host " The Microsoft Store requires specific image assets for your app listing." -ForegroundColor Gray
|
||||
Write-Host " You'll need to add these before you can publish." -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
Write-Host " TIP: Use the Windows App SDK project templates or design tools to create" -ForegroundColor Cyan
|
||||
Write-Host " properly sized assets. Each image must be exactly the size specified." -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
}
|
||||
else {
|
||||
Write-Host " [OK] All required assets are present!" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host " Updating Project Files..." -ForegroundColor Cyan
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "The script will now update your project files with the information you provided." -ForegroundColor White
|
||||
Write-Host "Original files have been backed up in the Publication\Backups folder." -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
|
||||
# Update Package.appxmanifest
|
||||
Write-Host "[1/2] Updating Package.appxmanifest..." -ForegroundColor Cyan
|
||||
|
||||
try {
|
||||
$manifestContent = Get-Content $manifestPath -Raw -ErrorAction Stop
|
||||
}
|
||||
catch {
|
||||
Write-Host " [ERROR] Could not read Package.appxmanifest: $($_.Exception.Message)" -ForegroundColor Red
|
||||
Write-Host " The file may be locked by another process." -ForegroundColor Yellow
|
||||
Write-Host " Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Backup original content
|
||||
$manifestBackup = $manifestContent
|
||||
$manifestUpdateCount = 0
|
||||
|
||||
# Update Identity element (Name and Publisher)
|
||||
Write-Host " Updating Identity Name..." -NoNewline -ForegroundColor Gray
|
||||
$identityNamePattern = '(?<=<Identity\s+Name=")[^"]*'
|
||||
if ($manifestContent -match $identityNamePattern) {
|
||||
$oldValue = $Matches[0]
|
||||
$identityNameUpdated = $manifestContent -replace $identityNamePattern, $packageIdentityName
|
||||
if ($identityNameUpdated -ne $manifestContent) {
|
||||
$manifestContent = $identityNameUpdated
|
||||
$manifestUpdateCount++
|
||||
Write-Host " [OK]" -ForegroundColor Green
|
||||
Write-Host " Changed from: '$oldValue'" -ForegroundColor DarkGray
|
||||
Write-Host " Changed to: '$packageIdentityName'" -ForegroundColor DarkGray
|
||||
}
|
||||
else {
|
||||
Write-Host " [NO CHANGE]" -ForegroundColor Yellow
|
||||
}
|
||||
}
|
||||
else {
|
||||
Write-Host " [WARNING] Could not find Identity Name attribute" -ForegroundColor Yellow
|
||||
}
|
||||
|
||||
Write-Host " Updating Publisher..." -NoNewline -ForegroundColor Gray
|
||||
$publisherPattern = '(?<=Publisher=")[^"]*(?=")'
|
||||
if ($manifestContent -match $publisherPattern) {
|
||||
$oldValue = $Matches[0]
|
||||
$identityPublisherUpdated = $manifestContent -replace $publisherPattern, $packageIdentityPublisher
|
||||
if ($identityPublisherUpdated -ne $manifestContent) {
|
||||
$manifestContent = $identityPublisherUpdated
|
||||
$manifestUpdateCount++
|
||||
Write-Host " [OK]" -ForegroundColor Green
|
||||
Write-Host " Changed from: '$oldValue'" -ForegroundColor DarkGray
|
||||
Write-Host " Changed to: '$packageIdentityPublisher'" -ForegroundColor DarkGray
|
||||
}
|
||||
else {
|
||||
Write-Host " [NO CHANGE]" -ForegroundColor Yellow
|
||||
}
|
||||
}
|
||||
else {
|
||||
Write-Host " [WARNING] Could not find Publisher attribute" -ForegroundColor Yellow
|
||||
}
|
||||
|
||||
# Update Properties (DisplayName and PublisherDisplayName)
|
||||
Write-Host " Updating Display Name..." -NoNewline -ForegroundColor Gray
|
||||
$displayNamePattern = '(?<=<DisplayName>)[^<]*(?=</DisplayName>)'
|
||||
if ($manifestContent -match $displayNamePattern) {
|
||||
$oldValue = $Matches[0]
|
||||
$displayNameUpdated = $manifestContent -replace $displayNamePattern, $displayName
|
||||
if ($displayNameUpdated -ne $manifestContent) {
|
||||
$manifestContent = $displayNameUpdated
|
||||
$manifestUpdateCount++
|
||||
Write-Host " [OK]" -ForegroundColor Green
|
||||
Write-Host " Changed from: '$oldValue'" -ForegroundColor DarkGray
|
||||
Write-Host " Changed to: '$displayName'" -ForegroundColor DarkGray
|
||||
}
|
||||
else {
|
||||
Write-Host " [NO CHANGE]" -ForegroundColor Yellow
|
||||
}
|
||||
}
|
||||
else {
|
||||
Write-Host " [WARNING] Could not find DisplayName element" -ForegroundColor Yellow
|
||||
}
|
||||
|
||||
Write-Host " Updating Publisher Display Name..." -NoNewline -ForegroundColor Gray
|
||||
$publisherDisplayNamePattern = '(?<=<PublisherDisplayName>)[^<]*(?=</PublisherDisplayName>)'
|
||||
if ($manifestContent -match $publisherDisplayNamePattern) {
|
||||
$oldValue = $Matches[0]
|
||||
$publisherDisplayNameUpdated = $manifestContent -replace $publisherDisplayNamePattern, $publisherDisplayName
|
||||
if ($publisherDisplayNameUpdated -ne $manifestContent) {
|
||||
$manifestContent = $publisherDisplayNameUpdated
|
||||
$manifestUpdateCount++
|
||||
Write-Host " [OK]" -ForegroundColor Green
|
||||
Write-Host " Changed from: '$oldValue'" -ForegroundColor DarkGray
|
||||
Write-Host " Changed to: '$publisherDisplayName'" -ForegroundColor DarkGray
|
||||
}
|
||||
else {
|
||||
Write-Host " [NO CHANGE]" -ForegroundColor Yellow
|
||||
}
|
||||
}
|
||||
else {
|
||||
Write-Host " [WARNING] Could not find PublisherDisplayName element" -ForegroundColor Yellow
|
||||
}
|
||||
|
||||
# Also update the VisualElements DisplayName
|
||||
Write-Host " Updating VisualElements Display Name..." -NoNewline -ForegroundColor Gray
|
||||
$visualElementsPattern = '(?<=<uap:VisualElements[^>]*DisplayName=")[^"]*'
|
||||
if ($manifestContent -match $visualElementsPattern) {
|
||||
$oldValue = $Matches[0]
|
||||
if ($oldValue -ne $displayName) {
|
||||
$visualElementsUpdated = $manifestContent -replace $visualElementsPattern, $displayName
|
||||
if ($visualElementsUpdated -ne $manifestContent) {
|
||||
$manifestContent = $visualElementsUpdated
|
||||
$manifestUpdateCount++
|
||||
Write-Host " [OK]" -ForegroundColor Green
|
||||
}
|
||||
else {
|
||||
Write-Host " [NO CHANGE]" -ForegroundColor Yellow
|
||||
}
|
||||
}
|
||||
else {
|
||||
Write-Host " [ALREADY SET]" -ForegroundColor Green
|
||||
}
|
||||
}
|
||||
else {
|
||||
Write-Host " [SKIP]" -ForegroundColor Gray
|
||||
}
|
||||
|
||||
# Write the updated manifest
|
||||
if ($manifestContent -ne $manifestBackup) {
|
||||
try {
|
||||
Set-Content -Path $manifestPath -Value $manifestContent -NoNewline -ErrorAction Stop
|
||||
Write-Host ""
|
||||
Write-Host " [SUCCESS] Package.appxmanifest updated ($manifestUpdateCount changes)" -ForegroundColor Green
|
||||
}
|
||||
catch {
|
||||
Write-Host ""
|
||||
Write-Host " [ERROR] Could not write to Package.appxmanifest: $($_.Exception.Message)" -ForegroundColor Red
|
||||
Write-Host " The file may be read-only or locked by another process." -ForegroundColor Yellow
|
||||
Write-Host " Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
else {
|
||||
Write-Host ""
|
||||
Write-Host " [INFO] No changes were needed for Package.appxmanifest" -ForegroundColor Cyan
|
||||
}
|
||||
Write-Host ""
|
||||
|
||||
# Update .csproj file
|
||||
Write-Host "[2/2] Updating TemplateCmdPalExtension.csproj..." -ForegroundColor Cyan
|
||||
|
||||
try {
|
||||
$csprojContent = Get-Content $csprojPath -Raw -ErrorAction Stop
|
||||
}
|
||||
catch {
|
||||
Write-Host " [ERROR] Could not read .csproj file: $($_.Exception.Message)" -ForegroundColor Red
|
||||
Write-Host " The file may be locked by another process." -ForegroundColor Yellow
|
||||
Write-Host " Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Backup original content
|
||||
$csprojBackup = $csprojContent
|
||||
$csprojUpdateCount = 0
|
||||
|
||||
# Check if Store properties are commented or uncommented
|
||||
Write-Host " Checking Store property configuration..." -NoNewline -ForegroundColor Gray
|
||||
$storePropsCommentedPattern = '<!--\s*<AppxPackageIdentityName>YOUR_PACKAGE_IDENTITY_NAME_HERE</AppxPackageIdentityName>\s*<AppxPackagePublisher>YOUR_PACKAGE_IDENTITY_PUBLISHER_HERE</AppxPackagePublisher>\s*<AppxPackageVersion>[^<]*</AppxPackageVersion>\s*-->'
|
||||
|
||||
if ($csprojContent -match $storePropsCommentedPattern) {
|
||||
Write-Host " [COMMENTED]" -ForegroundColor Yellow
|
||||
Write-Host " Uncommenting and updating Store properties..." -ForegroundColor Gray
|
||||
|
||||
# Uncomment and update the Store-specific properties
|
||||
$replacement = "<AppxPackageIdentityName>$packageIdentityName</AppxPackageIdentityName>`n <AppxPackagePublisher>$packageIdentityPublisher</AppxPackagePublisher>`n <AppxPackageVersion>0.0.1.0</AppxPackageVersion>"
|
||||
|
||||
$csprojContent = $csprojContent -replace $storePropsCommentedPattern, $replacement
|
||||
$csprojUpdateCount++
|
||||
Write-Host " [OK] Store properties uncommented and updated" -ForegroundColor Green
|
||||
}
|
||||
else {
|
||||
Write-Host " [UNCOMMENTED]" -ForegroundColor Green
|
||||
Write-Host " Updating existing Store property values..." -ForegroundColor Gray
|
||||
|
||||
# Try updating already-uncommented properties
|
||||
$identityNamePattern = '(?<=<AppxPackageIdentityName>)[^<]*(?=</AppxPackageIdentityName>)'
|
||||
if ($csprojContent -match $identityNamePattern) {
|
||||
$oldValue = $Matches[0]
|
||||
if ($oldValue -ne $packageIdentityName) {
|
||||
$csprojContent = $csprojContent -replace $identityNamePattern, $packageIdentityName
|
||||
$csprojUpdateCount++
|
||||
Write-Host " Updated AppxPackageIdentityName" -ForegroundColor Green
|
||||
}
|
||||
}
|
||||
|
||||
$publisherPattern = '(?<=<AppxPackagePublisher>)[^<]*(?=</AppxPackagePublisher>)'
|
||||
if ($csprojContent -match $publisherPattern) {
|
||||
$oldValue = $Matches[0]
|
||||
if ($oldValue -ne $packageIdentityPublisher) {
|
||||
$csprojContent = $csprojContent -replace $publisherPattern, $packageIdentityPublisher
|
||||
$csprojUpdateCount++
|
||||
Write-Host " Updated AppxPackagePublisher" -ForegroundColor Green
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Uncomment the PrepareAssets Target section (using (?s) for multi-line matching)
|
||||
Write-Host " Checking PrepareAssets Target..." -NoNewline -ForegroundColor Gray
|
||||
$targetPattern = '(?s)<!--\s*(<Target Name="PrepareAssets".*?</Target>)\s*-->'
|
||||
|
||||
if ($csprojContent -match $targetPattern) {
|
||||
Write-Host " [COMMENTED]" -ForegroundColor Yellow
|
||||
Write-Host " Uncommenting PrepareAssets Target..." -ForegroundColor Gray
|
||||
|
||||
$targetReplacement = '$1'
|
||||
$targetUpdated = $csprojContent -replace $targetPattern, $targetReplacement
|
||||
|
||||
if ($targetUpdated -ne $csprojContent) {
|
||||
$csprojContent = $targetUpdated
|
||||
$csprojUpdateCount++
|
||||
Write-Host " [OK] PrepareAssets Target uncommented" -ForegroundColor Green
|
||||
}
|
||||
else {
|
||||
Write-Host " [WARNING] Could not uncomment PrepareAssets Target" -ForegroundColor Yellow
|
||||
}
|
||||
}
|
||||
else {
|
||||
Write-Host " [ALREADY UNCOMMENTED]" -ForegroundColor Green
|
||||
}
|
||||
|
||||
# Write the updated csproj
|
||||
if ($csprojContent -ne $csprojBackup) {
|
||||
try {
|
||||
Set-Content -Path $csprojPath -Value $csprojContent -NoNewline -ErrorAction Stop
|
||||
Write-Host ""
|
||||
Write-Host " [SUCCESS] TemplateCmdPalExtension.csproj updated ($csprojUpdateCount changes)" -ForegroundColor Green
|
||||
}
|
||||
catch {
|
||||
Write-Host ""
|
||||
Write-Host " [ERROR] Could not write to .csproj file: $($_.Exception.Message)" -ForegroundColor Red
|
||||
Write-Host " The file may be read-only or locked by another process." -ForegroundColor Yellow
|
||||
Write-Host " Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
else {
|
||||
Write-Host ""
|
||||
Write-Host " [INFO] No changes were needed for TemplateCmdPalExtension.csproj" -ForegroundColor Cyan
|
||||
}
|
||||
Write-Host ""
|
||||
|
||||
# Display summary
|
||||
Write-Host "=================================================================" -ForegroundColor Cyan
|
||||
Write-Host " CONFIGURATION SUMMARY" -ForegroundColor White
|
||||
Write-Host "=================================================================" -ForegroundColor Cyan
|
||||
Write-Host " Package Identity Name:" -ForegroundColor Gray
|
||||
Write-Host " $packageIdentityName" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host " Publisher:" -ForegroundColor Gray
|
||||
|
||||
# Truncate publisher if too long
|
||||
$publisherDisplay = if ($packageIdentityPublisher.Length -gt 80) {
|
||||
$packageIdentityPublisher.Substring(0, 77) + "..."
|
||||
} else {
|
||||
$packageIdentityPublisher
|
||||
}
|
||||
Write-Host " $publisherDisplay" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host " Display Name:" -ForegroundColor Gray
|
||||
Write-Host " $displayName" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host " Publisher Display Name:" -ForegroundColor Gray
|
||||
Write-Host " $publisherDisplayName" -ForegroundColor White
|
||||
Write-Host "=================================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
# Display modified files
|
||||
Write-Host "Modified Files:" -ForegroundColor Yellow
|
||||
$manifestRelative = $manifestPath -replace [regex]::Escape($projectRoot), "."
|
||||
$csprojRelative = $csprojPath -replace [regex]::Escape($projectRoot), "."
|
||||
Write-Host " ✓ $manifestRelative" -ForegroundColor Green
|
||||
Write-Host " ✓ $csprojRelative" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
if ($backupDir) {
|
||||
Write-Host "Backup Location:" -ForegroundColor Yellow
|
||||
$backupRelative = $backupDir -replace [regex]::Escape($projectRoot), "."
|
||||
Write-Host " $backupRelative" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
# Asset status
|
||||
if ($missingAssets.Count -gt 0) {
|
||||
Write-Host "=================================================================" -ForegroundColor Red
|
||||
Write-Host " ACTION REQUIRED: Missing Assets" -ForegroundColor Yellow
|
||||
Write-Host "=================================================================" -ForegroundColor Red
|
||||
Write-Host " $($missingAssets.Count) required asset(s) are missing. Add them before publishing:" -ForegroundColor White
|
||||
Write-Host ""
|
||||
|
||||
foreach ($asset in $missingAssets) {
|
||||
Write-Host " * $($asset.Name) ($($asset.Size))" -ForegroundColor White
|
||||
}
|
||||
|
||||
Write-Host "=================================================================" -ForegroundColor Red
|
||||
Write-Host ""
|
||||
Write-Host "Asset Creation Tips:" -ForegroundColor Cyan
|
||||
Write-Host " * Use PNG format with transparency where appropriate" -ForegroundColor Gray
|
||||
Write-Host " * Follow Microsoft Store asset guidelines" -ForegroundColor Gray
|
||||
Write-Host " * Reference: https://learn.microsoft.com/windows/apps/design/style/app-icons-and-logos" -ForegroundColor DarkCyan
|
||||
Write-Host ""
|
||||
}
|
||||
else {
|
||||
Write-Host " [OK] All required assets are present" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
# Final success message with conditional messaging
|
||||
Write-Host "=================================================================" -ForegroundColor Green
|
||||
if ($missingAssets.Count -gt 0) {
|
||||
Write-Host " Setup Complete - Action Required" -ForegroundColor Yellow
|
||||
Write-Host "=================================================================" -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
Write-Host " Your project has been configured for Microsoft Store publishing." -ForegroundColor White
|
||||
Write-Host " However, you need to add $($missingAssets.Count) missing asset(s) before publishing." -ForegroundColor Yellow
|
||||
}
|
||||
else {
|
||||
Write-Host " Setup Completed Successfully!" -ForegroundColor Green
|
||||
Write-Host "=================================================================" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
Write-Host " Your extension is ready for Microsoft Store publishing!" -ForegroundColor White
|
||||
Write-Host " All configuration and assets are in place." -ForegroundColor Green
|
||||
}
|
||||
Write-Host ""
|
||||
Write-Host "Next Steps:" -ForegroundColor Cyan
|
||||
Write-Host " 1. Build MSIX bundles by running:" -ForegroundColor Gray
|
||||
Write-Host " .\build-msix-bundles.ps1" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host " 2. Upload the bundle to Microsoft Store Partner Center" -ForegroundColor Gray
|
||||
Write-Host " (Located in Publication\ folder after build)" -ForegroundColor DarkGray
|
||||
Write-Host ""
|
||||
Write-Host " 3. Follow submission instructions at:" -ForegroundColor Gray
|
||||
Write-Host " https://learn.microsoft.com/windows/powertoys/command-palette/publish-extension" -ForegroundColor DarkCyan
|
||||
Write-Host ""
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
@@ -0,0 +1,512 @@
|
||||
# One-Time WinGet Publication Setup Script for CmdPal Extension
|
||||
# This script collects information and updates files needed for WinGet publication via EXE installer
|
||||
# Version: 1.0
|
||||
|
||||
#Requires -Version 5.1
|
||||
|
||||
|
||||
# Enable strict mode for better error detection
|
||||
Set-StrictMode -Version Latest
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host " WinGet Publication Setup (EXE Installer)" -ForegroundColor Cyan
|
||||
Write-Host " CmdPal Extension Publisher" -ForegroundColor Cyan
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
# Path to the project files
|
||||
$publicationRoot = $PSScriptRoot
|
||||
$projectRoot = Split-Path -Parent $publicationRoot
|
||||
$projectName = Split-Path -Leaf $projectRoot
|
||||
$wingetResourcesPath = Join-Path $PSScriptRoot "winget-resources"
|
||||
|
||||
Write-Host "Validating project structure..." -ForegroundColor Cyan
|
||||
Write-Host " Publication Root: $publicationRoot" -ForegroundColor Gray
|
||||
Write-Host " Project Root: $projectRoot" -ForegroundColor Gray
|
||||
Write-Host " Project Name: $projectName" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
|
||||
# Verify required files exist
|
||||
$csprojPath = Join-Path $projectRoot "$projectName.csproj"
|
||||
$manifestPath = Join-Path $projectRoot "Package.appxmanifest"
|
||||
$extensionCsPath = Join-Path $projectRoot "$projectName.cs"
|
||||
|
||||
$buildExePath = Join-Path $wingetResourcesPath "build-exe.ps1"
|
||||
$setupTemplatePath = Join-Path $wingetResourcesPath "setup-template.iss"
|
||||
$releaseYmlPath = Join-Path $wingetResourcesPath "release-extension.yml"
|
||||
|
||||
if (-not (Test-Path $csprojPath)) {
|
||||
Write-Host "ERROR: Could not find .csproj file at: $csprojPath" -ForegroundColor Red
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
|
||||
if (-not (Test-Path $manifestPath)) {
|
||||
Write-Host "ERROR: Could not find Package.appxmanifest at: $manifestPath" -ForegroundColor Red
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
|
||||
if (-not (Test-Path $buildExePath)) {
|
||||
Write-Host "ERROR: Could not find build-exe.ps1 at: $buildExePath" -ForegroundColor Red
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
|
||||
if (-not (Test-Path $setupTemplatePath)) {
|
||||
Write-Host "ERROR: Could not find setup-template.iss at: $setupTemplatePath" -ForegroundColor Red
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
|
||||
if (-not (Test-Path $releaseYmlPath)) {
|
||||
Write-Host "ERROR: Could not find release-extension.yml at: $releaseYmlPath" -ForegroundColor Red
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Host " [OK] All required files found" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
# Create backup directory
|
||||
$backupDir = Join-Path $wingetResourcesPath "Backups"
|
||||
if (-not (Test-Path $backupDir)) {
|
||||
try {
|
||||
New-Item -Path $backupDir -ItemType Directory -Force | Out-Null
|
||||
Write-Host "Created backup directory: $backupDir" -ForegroundColor Gray
|
||||
}
|
||||
catch {
|
||||
Write-Host "WARNING: Could not create backup directory. Proceeding without backups." -ForegroundColor Yellow
|
||||
$backupDir = $null
|
||||
}
|
||||
}
|
||||
|
||||
# Create timestamped backups
|
||||
if ($backupDir) {
|
||||
$timestamp = Get-Date -Format "yyyyMMdd-HHmmss"
|
||||
try {
|
||||
Copy-Item $buildExePath -Destination (Join-Path $backupDir "build-exe.ps1.$timestamp.bak") -Force
|
||||
Copy-Item $setupTemplatePath -Destination (Join-Path $backupDir "setup-template.iss.$timestamp.bak") -Force
|
||||
Copy-Item $releaseYmlPath -Destination (Join-Path $backupDir "release-extension.yml.$timestamp.bak") -Force
|
||||
Write-Host "Backups created: $timestamp" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
}
|
||||
catch {
|
||||
Write-Host "WARNING: Could not create backup files. Proceeding anyway." -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
}
|
||||
}
|
||||
|
||||
# Read existing project information
|
||||
Write-Host "Reading project information..." -ForegroundColor Cyan
|
||||
try {
|
||||
[xml]$manifest = Get-Content $manifestPath -ErrorAction Stop
|
||||
$packageName = $manifest.Package.Identity.Name
|
||||
$packageVersion = $manifest.Package.Identity.Version
|
||||
$displayName = $manifest.Package.Properties.DisplayName
|
||||
$publisherDisplayName = $manifest.Package.Properties.PublisherDisplayName
|
||||
|
||||
Write-Host " Current Package Name: $packageName" -ForegroundColor White
|
||||
Write-Host " Current Version: $packageVersion" -ForegroundColor White
|
||||
Write-Host " Current Display Name: $displayName" -ForegroundColor White
|
||||
Write-Host " Current Publisher: $publisherDisplayName" -ForegroundColor White
|
||||
Write-Host ""
|
||||
}
|
||||
catch {
|
||||
Write-Host "ERROR: Could not read Package.appxmanifest: $($_.Exception.Message)" -ForegroundColor Red
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Extract GUID/CLSID from extension class
|
||||
Write-Host "Reading extension GUID..." -ForegroundColor Cyan
|
||||
try {
|
||||
$extensionCsContent = Get-Content $extensionCsPath -Raw -ErrorAction Stop
|
||||
if ($extensionCsContent -match '\[Guid\("([A-F0-9-]+)"\)\]') {
|
||||
$extensionGuid = $Matches[1]
|
||||
Write-Host " Extension GUID: $extensionGuid" -ForegroundColor White
|
||||
Write-Host ""
|
||||
}
|
||||
else {
|
||||
Write-Host "ERROR: Could not find GUID in $projectName.cs" -ForegroundColor Red
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
catch {
|
||||
Write-Host "ERROR: Could not read $projectName.cs: $($_.Exception.Message)" -ForegroundColor Red
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Host "This script will configure your extension for WinGet publication using EXE installer." -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host "The following information will be collected:" -ForegroundColor White
|
||||
Write-Host " - GitHub Repository URL (for releases)" -ForegroundColor Gray
|
||||
Write-Host " - Developer/Publisher Name" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
Write-Host "The script will update:" -ForegroundColor Yellow
|
||||
Write-Host " - build-exe.ps1 (build script)" -ForegroundColor Gray
|
||||
Write-Host " - setup-template.iss (Inno Setup installer script)" -ForegroundColor Gray
|
||||
Write-Host " - release-extension.yml (GitHub Actions workflow)" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
|
||||
# Function to validate URL
|
||||
function Test-GitHubUrl {
|
||||
param([string]$url)
|
||||
|
||||
if ([string]::IsNullOrWhiteSpace($url)) { return $false }
|
||||
if ($url -notmatch '^https://github\.com/[a-zA-Z0-9_-]+/[a-zA-Z0-9_.-]+/?$') { return $false }
|
||||
|
||||
return $true
|
||||
}
|
||||
|
||||
# Function to validate developer name
|
||||
function Test-DeveloperName {
|
||||
param([string]$name)
|
||||
|
||||
if ([string]::IsNullOrWhiteSpace($name)) { return $false }
|
||||
if ($name.Length -lt 1 -or $name.Length -gt 256) { return $false }
|
||||
|
||||
return $true
|
||||
}
|
||||
|
||||
# Prompt to continue
|
||||
Write-Host "Do you want to continue? (Y/N): " -ForegroundColor Yellow -NoNewline
|
||||
$continue = Read-Host
|
||||
if ($continue -notmatch '^[Yy]') {
|
||||
Write-Host ""
|
||||
Write-Host "Setup cancelled by user." -ForegroundColor Yellow
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 0
|
||||
}
|
||||
Write-Host ""
|
||||
|
||||
# Collect GitHub Repository URL
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host " Step 1: GitHub Repository URL" -ForegroundColor Cyan
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "Enter your GitHub repository URL:" -ForegroundColor Yellow
|
||||
Write-Host " This is where your extension's releases will be published." -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
Write-Host " Format: https://github.com/username/repository" -ForegroundColor DarkGray
|
||||
Write-Host " Example: https://github.com/johndoe/MyAwesomeExtension" -ForegroundColor DarkGray
|
||||
Write-Host ""
|
||||
|
||||
$githubRepoUrl = ""
|
||||
$maxAttempts = 3
|
||||
$attempt = 0
|
||||
|
||||
do {
|
||||
$attempt++
|
||||
Write-Host "GitHub Repository URL" -NoNewline -ForegroundColor Yellow
|
||||
if ($attempt -gt 1) {
|
||||
Write-Host " (Attempt $attempt of $maxAttempts)" -NoNewline -ForegroundColor Red
|
||||
}
|
||||
Write-Host ": " -NoNewline -ForegroundColor Yellow
|
||||
$githubRepoUrl = Read-Host
|
||||
|
||||
if ([string]::IsNullOrWhiteSpace($githubRepoUrl)) {
|
||||
Write-Host " [ERROR] GitHub Repository URL cannot be empty." -ForegroundColor Red
|
||||
Write-Host ""
|
||||
}
|
||||
elseif (-not (Test-GitHubUrl $githubRepoUrl)) {
|
||||
Write-Host " [ERROR] Invalid GitHub URL format." -ForegroundColor Red
|
||||
Write-Host " Please use format: https://github.com/username/repository" -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
}
|
||||
else {
|
||||
Write-Host " [OK] GitHub Repository URL accepted: $githubRepoUrl" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
break
|
||||
}
|
||||
|
||||
if ($attempt -ge $maxAttempts) {
|
||||
Write-Host ""
|
||||
Write-Host "Maximum attempts reached. Please try again with a valid GitHub URL." -ForegroundColor Red
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
exit 1
|
||||
}
|
||||
} while ($true)
|
||||
|
||||
# Collect Developer Name
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host " Step 2: Developer/Publisher Name" -ForegroundColor Cyan
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "Enter your developer or publisher name:" -ForegroundColor Yellow
|
||||
Write-Host " This will appear in the EXE installer as the publisher." -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
Write-Host " IMPORTANT: If you published to Microsoft Store, this should match" -ForegroundColor Yellow
|
||||
Write-Host " the PublisherDisplayName from your Store configuration." -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
Write-Host " Example: John Doe" -ForegroundColor DarkGray
|
||||
Write-Host " Example: Contoso Software" -ForegroundColor DarkGray
|
||||
Write-Host ""
|
||||
Write-Host " Current value from manifest: $publisherDisplayName" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
$developerName = ""
|
||||
$attempt = 0
|
||||
|
||||
do {
|
||||
$attempt++
|
||||
Write-Host "Developer Name" -NoNewline -ForegroundColor Yellow
|
||||
if ($attempt -gt 1) {
|
||||
Write-Host " (Attempt $attempt of $maxAttempts)" -NoNewline -ForegroundColor Red
|
||||
}
|
||||
Write-Host " [press Enter to use default]: " -NoNewline -ForegroundColor Yellow
|
||||
$input = Read-Host
|
||||
|
||||
if ([string]::IsNullOrWhiteSpace($input)) {
|
||||
$developerName = $publisherDisplayName
|
||||
Write-Host " [OK] Using default: $developerName" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
break
|
||||
}
|
||||
elseif (-not (Test-DeveloperName $input)) {
|
||||
Write-Host " [ERROR] Invalid developer name." -ForegroundColor Red
|
||||
Write-Host ""
|
||||
}
|
||||
else {
|
||||
$developerName = $input
|
||||
Write-Host " [OK] Developer name accepted: $developerName" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
break
|
||||
}
|
||||
|
||||
if ($attempt -ge $maxAttempts) {
|
||||
Write-Host ""
|
||||
Write-Host "Maximum attempts reached. Using default: $publisherDisplayName" -ForegroundColor Yellow
|
||||
$developerName = $publisherDisplayName
|
||||
Write-Host ""
|
||||
break
|
||||
}
|
||||
} while ($true)
|
||||
|
||||
# Update files
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host " Updating Configuration Files..." -ForegroundColor Cyan
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
# Update build-exe.ps1
|
||||
Write-Host "[1/3] Updating build-exe.ps1..." -ForegroundColor Cyan
|
||||
try {
|
||||
$buildExeContent = Get-Content $buildExePath -Raw -ErrorAction Stop
|
||||
|
||||
# Update ExtensionName default value
|
||||
$buildExeContent = $buildExeContent -replace '\[string\]\$ExtensionName = "UPDATE"', "[string]`$ExtensionName = `"$projectName`""
|
||||
|
||||
# Update Version default value
|
||||
$buildExeContent = $buildExeContent -replace '\[string\]\$Version = "UPDATE"', "[string]`$Version = `"$packageVersion`""
|
||||
|
||||
Set-Content -Path $buildExePath -Value $buildExeContent -NoNewline -ErrorAction Stop
|
||||
Write-Host " [SUCCESS] build-exe.ps1 updated" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
}
|
||||
catch {
|
||||
Write-Host " [ERROR] Could not update build-exe.ps1: $($_.Exception.Message)" -ForegroundColor Red
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
# Update setup-template.iss
|
||||
Write-Host "[2/3] Updating setup-template.iss..." -ForegroundColor Cyan
|
||||
try {
|
||||
$setupTemplateContent = Get-Content $setupTemplatePath -Raw -ErrorAction Stop
|
||||
|
||||
# Update version
|
||||
$setupTemplateContent = $setupTemplateContent -replace '#define AppVersion ".*"', "#define AppVersion `"$packageVersion`""
|
||||
|
||||
# Update AppId GUID
|
||||
$setupTemplateContent = $setupTemplateContent -replace 'AppId=\{\{GUID-HERE\}\}', "AppId={{$extensionGuid}}"
|
||||
|
||||
# Update AppName (DISPLAY_NAME)
|
||||
$setupTemplateContent = $setupTemplateContent -replace 'AppName=DISPLAY_NAME', "AppName=$displayName"
|
||||
|
||||
# Update AppPublisher (DEVELOPER_NAME)
|
||||
$setupTemplateContent = $setupTemplateContent -replace 'AppPublisher=DEVELOPER_NAME', "AppPublisher=$developerName"
|
||||
|
||||
# Update DefaultDirName (EXTENSION_NAME)
|
||||
$setupTemplateContent = $setupTemplateContent -replace 'DefaultDirName=\{autopf\}\\EXTENSION_NAME', "DefaultDirName={autopf}\$projectName"
|
||||
|
||||
# Update OutputBaseFilename (EXTENSION_NAME)
|
||||
$setupTemplateContent = $setupTemplateContent -replace 'OutputBaseFilename=EXTENSION_NAME-Setup', "OutputBaseFilename=$projectName-Setup"
|
||||
|
||||
# Update Icon name (DISPLAY_NAME)
|
||||
$setupTemplateContent = $setupTemplateContent -replace 'Name: "\{group\}\\DISPLAY_NAME"', "Name: `"{group}\$displayName`""
|
||||
|
||||
# Update Icon filename (EXTENSION_NAME)
|
||||
$setupTemplateContent = $setupTemplateContent -replace 'Filename: "\{app\}\\EXTENSION_NAME\.exe"', "Filename: `"{app}\$projectName.exe`""
|
||||
|
||||
# Update Registry CLSID entries
|
||||
$setupTemplateContent = $setupTemplateContent -replace 'CLSID\\CLSID-HERE', "CLSID\{{$extensionGuid}}"
|
||||
$setupTemplateContent = $setupTemplateContent -replace '\{\{CLSID-HERE\}\}', "{{$extensionGuid}}"
|
||||
|
||||
# Update Registry ValueData (EXTENSION_NAME)
|
||||
$setupTemplateContent = $setupTemplateContent -replace 'ValueData: "EXTENSION_NAME"', "ValueData: `"$projectName`""
|
||||
|
||||
# Update LocalServer32 ValueData
|
||||
$setupTemplateContent = $setupTemplateContent -replace 'ValueData: "\{app\}\\EXTENSION_NAME\.exe', "ValueData: `"{app}\$projectName.exe"
|
||||
|
||||
Set-Content -Path $setupTemplatePath -Value $setupTemplateContent -NoNewline -ErrorAction Stop
|
||||
Write-Host " [SUCCESS] setup-template.iss updated" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
}
|
||||
catch {
|
||||
Write-Host " [ERROR] Could not update setup-template.iss: $($_.Exception.Message)" -ForegroundColor Red
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
# Update release-extension.yml
|
||||
Write-Host "[3/3] Updating release-extension.yml..." -ForegroundColor Cyan
|
||||
try {
|
||||
$releaseYmlContent = Get-Content $releaseYmlPath -Raw -ErrorAction Stop
|
||||
|
||||
# Update workflow name
|
||||
$releaseYmlContent = $releaseYmlContent -replace 'name: CmdPal Extension - Build EXE Installer', "name: $displayName - Build EXE Installer"
|
||||
|
||||
# Update environment variables with actual values
|
||||
$releaseYmlContent = $releaseYmlContent -replace "DISPLAY_NAME: \$\{\{ vars\.DISPLAY_NAME \|\| 'DISPLAY_NAME' \}\}", "DISPLAY_NAME: `${{ vars.DISPLAY_NAME || '$displayName' }}"
|
||||
$releaseYmlContent = $releaseYmlContent -replace "EXTENSION_NAME: \$\{\{ vars\.EXTENSION_NAME \|\| 'EXTENSION_NAME' \}\}", "EXTENSION_NAME: `${{ vars.EXTENSION_NAME || '$projectName' }}"
|
||||
$releaseYmlContent = $releaseYmlContent -replace "FOLDER_NAME: \$\{\{ vars\.FOLDER_NAME \|\| 'FOLDER_NAME' \}\}", "FOLDER_NAME: `${{ vars.FOLDER_NAME || '$projectName' }}"
|
||||
$releaseYmlContent = $releaseYmlContent -replace "GITHUB_REPO_URL: \$\{\{ vars\.GITHUB_REPO_URL \|\| 'GITHUB_REPO_URL' \}\}", "GITHUB_REPO_URL: `${{ vars.GITHUB_REPO_URL || '$githubRepoUrl' }}"
|
||||
|
||||
Set-Content -Path $releaseYmlPath -Value $releaseYmlContent -NoNewline -ErrorAction Stop
|
||||
Write-Host " [SUCCESS] release-extension.yml updated" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
}
|
||||
catch {
|
||||
Write-Host " [ERROR] Could not update release-extension.yml: $($_.Exception.Message)" -ForegroundColor Red
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
# Display summary
|
||||
Write-Host "================================================================" -ForegroundColor Green
|
||||
Write-Host " CONFIGURATION SUMMARY" -ForegroundColor White
|
||||
Write-Host "================================================================" -ForegroundColor Green
|
||||
Write-Host " Extension Name:" -ForegroundColor Gray
|
||||
Write-Host " $projectName" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host " Display Name:" -ForegroundColor Gray
|
||||
Write-Host " $displayName" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host " Version:" -ForegroundColor Gray
|
||||
Write-Host " $packageVersion" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host " Developer:" -ForegroundColor Gray
|
||||
Write-Host " $developerName" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host " Extension GUID:" -ForegroundColor Gray
|
||||
Write-Host " $extensionGuid" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host " GitHub Repository:" -ForegroundColor Gray
|
||||
Write-Host " $githubRepoUrl" -ForegroundColor White
|
||||
Write-Host "================================================================" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
# Display modified files
|
||||
Write-Host "Updated Files:" -ForegroundColor Yellow
|
||||
$buildExeRelative = $buildExePath -replace [regex]::Escape($projectRoot + "\"), ""
|
||||
$setupTemplateRelative = $setupTemplatePath -replace [regex]::Escape($projectRoot + "\"), ""
|
||||
$releaseYmlRelative = $releaseYmlPath -replace [regex]::Escape($projectRoot + "\"), ""
|
||||
Write-Host " [OK] $buildExeRelative" -ForegroundColor Green
|
||||
Write-Host " [OK] $setupTemplateRelative" -ForegroundColor Green
|
||||
Write-Host " [OK] $releaseYmlRelative" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
if ($backupDir) {
|
||||
Write-Host "Backup Location:" -ForegroundColor Yellow
|
||||
$backupRelative = $backupDir -replace [regex]::Escape($projectRoot + "\"), ""
|
||||
Write-Host " $backupRelative" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
# Move files to correct locations
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host " Moving Files to Correct Locations" -ForegroundColor Cyan
|
||||
Write-Host "================================================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "The following file will be moved:" -ForegroundColor Yellow
|
||||
Write-Host " - release-extension.yml → .github/workflows/ (2 levels up)" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
Write-Host "The following files will remain in winget-resources:" -ForegroundColor Yellow
|
||||
Write-Host " - build-exe.ps1" -ForegroundColor Gray
|
||||
Write-Host " - setup-template.iss" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
|
||||
# Calculate destination paths
|
||||
# From: TemplateCmdPalExtension/Publication/winget-resources/
|
||||
# release-extension.yml → TemplateCmdPalExtension/.github/workflows/ (2 levels up from Publication)
|
||||
|
||||
# GitHub workflows directory (2 levels up from Publication)
|
||||
$solutionRoot = Split-Path -Parent $projectRoot
|
||||
$githubWorkflowsDir = Join-Path $solutionRoot ".github\workflows"
|
||||
$releaseYmlDestination = Join-Path $githubWorkflowsDir "release-extension.yml"
|
||||
|
||||
Write-Host "Destination:" -ForegroundColor Yellow
|
||||
Write-Host " release-extension.yml → $releaseYmlDestination" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
|
||||
# Move release-extension.yml
|
||||
Write-Host "Moving release-extension.yml..." -ForegroundColor Cyan
|
||||
try {
|
||||
if (-not (Test-Path $githubWorkflowsDir)) {
|
||||
Write-Host " Creating .github/workflows directory..." -ForegroundColor Gray
|
||||
New-Item -Path $githubWorkflowsDir -ItemType Directory -Force | Out-Null
|
||||
}
|
||||
|
||||
if (Test-Path $releaseYmlDestination) {
|
||||
Write-Host " [WARNING] Destination file exists, overwriting..." -ForegroundColor Yellow
|
||||
}
|
||||
Move-Item $releaseYmlPath -Destination $releaseYmlDestination -Force -ErrorAction Stop
|
||||
Write-Host " [SUCCESS] Moved to: $releaseYmlDestination" -ForegroundColor Green
|
||||
}
|
||||
catch {
|
||||
Write-Host " [ERROR] Could not move release-extension.yml: $($_.Exception.Message)" -ForegroundColor Red
|
||||
}
|
||||
Write-Host ""
|
||||
|
||||
# Verify file was moved
|
||||
Write-Host "Verifying file..." -ForegroundColor Cyan
|
||||
|
||||
if (Test-Path $releaseYmlDestination) {
|
||||
Write-Host " [OK] release-extension.yml exists at destination" -ForegroundColor Green
|
||||
}
|
||||
else {
|
||||
Write-Host " [ERROR] release-extension.yml NOT found at destination" -ForegroundColor Red
|
||||
}
|
||||
Write-Host ""
|
||||
|
||||
# Final instructions
|
||||
Write-Host "================================================================" -ForegroundColor Green
|
||||
Write-Host " Setup Completed Successfully!" -ForegroundColor Green
|
||||
Write-Host "================================================================" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
Write-Host "Files have been configured:" -ForegroundColor Yellow
|
||||
Write-Host " Updated (in winget-resources):" -ForegroundColor Cyan
|
||||
Write-Host " $buildExePath" -ForegroundColor White
|
||||
Write-Host " $setupTemplatePath" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host " Moved to GitHub workflows:" -ForegroundColor Cyan
|
||||
Write-Host " $releaseYmlDestination" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host "Next Steps:" -ForegroundColor Cyan
|
||||
Write-Host " 1. Review the configured files to ensure correctness" -ForegroundColor Gray
|
||||
Write-Host " 2. Add and commit files and push to Github" -ForegroundColor Gray
|
||||
Write-Host " 3. Follow instructions at https://learn.microsoft.com//windows/powertoys/command-palette/publish-extension" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
Write-Host "Press any key to exit..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user