diff --git a/ExternalConnectors/ExternalConnectors.csproj b/ExternalConnectors/ExternalConnectors.csproj index db984ec7..9b5f641f 100644 --- a/ExternalConnectors/ExternalConnectors.csproj +++ b/ExternalConnectors/ExternalConnectors.csproj @@ -10,6 +10,10 @@ Debug;Release;Debug Portable;Release Portable + + True + + diff --git a/Tools/github_functions.ps1 b/Tools/github_functions.ps1 index d406b5b1..ea721aa1 100644 --- a/Tools/github_functions.ps1 +++ b/Tools/github_functions.ps1 @@ -8,7 +8,16 @@ if ($IsAppVeyor) { #$CURRENT_GITHUB_USER = $env:APPVEYOR_REPO_NAME.Split("/")[0] Install-Module -Name PowerShellForGitHub -Scope CurrentUser Set-GitHubConfiguration -DisableTelemetry - $PSDefaultParameterValues["*-GitHub*:AccessToken"] = "$env:ACCESS_TOKEN" + $PSDefaultParameterValues["*-GitHub*:AccessToken"] = "$env:ACCESS_TOKEN" + #New-Item -Path "$Env:APPVEYOR_BUILD_FOLDER\Release" -ItemType Directory -Force +} + +function New-TemporaryDirectory { + $parent = [System.IO.Path]::GetTempPath() + [string] $name = [System.Guid]::NewGuid() + $fullTempPath = (Join-Path $parent $name) + New-Item -ItemType Directory -Path $fullTempPath + return $fullTempPath } Function ConvertFrom-Base64($base64) { diff --git a/Tools/postbuild.ps1 b/Tools/postbuild.ps1 new file mode 100644 index 00000000..8a9f6d89 --- /dev/null +++ b/Tools/postbuild.ps1 @@ -0,0 +1,81 @@ +param ( + [string] + [Parameter(Mandatory=$true)] + $SolutionDir, + + [string] + [Parameter(Mandatory=$true)] + $TargetDir, + + [string] + [Parameter(Mandatory=$true)] + $TargetFileName, + + [string] + [Parameter(Mandatory=$true)] + $ConfigurationName, + + [string] + $CertificatePath, + + [string] + $CertificatePassword, + + [string[]] + $ExcludeFromSigning +) + +. "$PSScriptRoot\github_functions.ps1" + +Write-Output "" +Write-Output "+============================================================+" +Write-Output "| Beginning mRemoteNG Post Build |" +Write-Output "+============================================================+" +Format-Table -AutoSize -Wrap -InputObject @{ + "SolutionDir" = $SolutionDir + "TargetDir" = $TargetDir + "TargetFileName" = $TargetFileName + "ConfigurationName" = $ConfigurationName + "CertificatePath" = $CertificatePath + "ExcludeFromSigning" = $ExcludeFromSigning +} + +$IsAppVeyor = !([string]::IsNullOrEmpty($Env:APPVEYOR_BUILD_FOLDER)) + +if ( $ConfigurationName -match "Debug" -and -not $IsAppVeyor ) {return; } #skip when Debug local developer build +if ( $env:APPVEYOR_PROJECT_NAME -match "(CI)" -and -not $IsAppVeyor ) {return; } #skip when AppVeyor (CI) build + +$dstPath = "$($SolutionDir)Release" +New-Item -Path $dstPath -ItemType Directory -Force + +# $RunInstaller = $TargetDir -match "\\mRemoteNGInstaller\\Installer\\bin\\" +# $RunPortable = ( ($Targetdir -match "\\mRemoteNG\\bin\\") -and -not ($TargetDir -match "\\mRemoteNGInstaller\\Installer\\bin\\") ) + +Write-Output "-Begin Release Portable" + +if ( ($ConfigurationName -match "Release") -and ($env:APPVEYOR_PROJECT_NAME -notcontains "(CI)") ) { + + & "$PSScriptRoot\tidy_files_for_release.ps1" -TargetDir $TargetDir -ConfigurationName $ConfigurationName + + & "$PSScriptRoot\sign_binaries.ps1" -TargetDir $TargetDir -CertificatePath $CertificatePath -CertificatePassword $CertificatePassword -ConfigurationName $ConfigurationName -Exclude $ExcludeFromSigning -SolutionDir $SolutionDir + + & "$PSScriptRoot\verify_binary_signatures.ps1" -TargetDir $TargetDir -ConfigurationName $ConfigurationName -CertificatePath $CertificatePath -SolutionDir $SolutionDir + + & "$PSScriptRoot\zip_files.ps1" -SolutionDir $SolutionDir -TargetDir $TargetDir -ConfigurationName $ConfigurationName + + if ( $IsAppVeyor -and (![string]::IsNullOrEmpty($env:WEBSITE_TARGET_OWNER)) -and (![string]::IsNullOrEmpty($env:WEBSITE_TARGET_REPOSITORY)) ) { + + & "$PSScriptRoot\update_and_upload_website_release_json_file.ps1" -WebsiteTargetOwner $env:WEBSITE_TARGET_OWNER -WebsiteTargetRepository $env:WEBSITE_TARGET_REPOSITORY -PreTagName $env:NightlyBuildTagName -TagName $env:APPVEYOR_BUILD_VERSION -ProjectName $env:APPVEYOR_PROJECT_NAME + + & "$PSScriptRoot\create_upg_chk_files.ps1" -WebsiteTargetOwner $env:WEBSITE_TARGET_OWNER -WebsiteTargetRepository $env:WEBSITE_TARGET_REPOSITORY -PreTagName $env:NightlyBuildTagName -TagName $env:APPVEYOR_BUILD_VERSION -ProjectName $env:APPVEYOR_PROJECT_NAME + + } + + Write-Output "-End Release Portable" + +} + + +Write-Output "End mRemoteNG Post Build" +Write-Output "" + diff --git a/Tools/postbuild_installer.ps1 b/Tools/postbuild_installer.ps1 index cfed94c5..74e758a3 100644 --- a/Tools/postbuild_installer.ps1 +++ b/Tools/postbuild_installer.ps1 @@ -40,19 +40,24 @@ Format-Table -AutoSize -Wrap -InputObject @{ "ExcludeFromSigning" = $ExcludeFromSigning } +$IsAppVeyor = !([string]::IsNullOrEmpty($Env:APPVEYOR_BUILD_FOLDER)) -& "$PSScriptRoot\sign_binaries.ps1" -TargetDir $TargetDir -CertificatePath $CertificatePath -CertificatePassword $CertificatePassword -ConfigurationName $ConfigurationName -Exclude $ExcludeFromSigning -SolutionDir $SolutionDir +if ( $IsAppVeyor -and ($ConfigurationName.ToUpper() -match "RELEASE") -and (($env:APPVEYOR_PROJECT_NAME).ToUpper() -notcontains "(CI)") ) { -& "$PSScriptRoot\verify_binary_signatures.ps1" -TargetDir $TargetDir -ConfigurationName $ConfigurationName -CertificatePath $CertificatePath -SolutionDir $SolutionDir - -& "$PSScriptRoot\rename_and_copy_installer.ps1" -SolutionDir $SolutionDir -BuildConfiguration $ConfigurationName.Trim() - -if ( ![string]::IsNullOrEmpty($env:WEBSITE_TARGET_OWNER) -and ![string]::IsNullOrEmpty($env:WEBSITE_TARGET_REPOSITORY) ) { + & "$PSScriptRoot\sign_binaries.ps1" -TargetDir $TargetDir -CertificatePath $CertificatePath -CertificatePassword $CertificatePassword -ConfigurationName $ConfigurationName -Exclude $ExcludeFromSigning -SolutionDir $SolutionDir + & "$PSScriptRoot\verify_binary_signatures.ps1" -TargetDir $TargetDir -ConfigurationName $ConfigurationName -CertificatePath $CertificatePath -SolutionDir $SolutionDir + + & "$PSScriptRoot\rename_and_copy_installer.ps1" -SolutionDir $SolutionDir -BuildConfiguration $ConfigurationName.Trim() + & "$PSScriptRoot\create_upg_chk_files.ps1" -WebsiteTargetOwner $env:WEBSITE_TARGET_OWNER -WebsiteTargetRepository $env:WEBSITE_TARGET_REPOSITORY -PreTagName $env:NightlyBuildTagName -TagName $env:APPVEYOR_BUILD_VERSION -ProjectName $env:APPVEYOR_PROJECT_NAME - + & "$PSScriptRoot\update_and_upload_website_release_json_file.ps1" -WebsiteTargetOwner $env:WEBSITE_TARGET_OWNER -WebsiteTargetRepository $env:WEBSITE_TARGET_REPOSITORY -PreTagName $env:NightlyBuildTagName -TagName $env:APPVEYOR_BUILD_VERSION -ProjectName $env:APPVEYOR_PROJECT_NAME + + & "$PSScriptRoot\update_and_upload_assemblyinfocs.ps1" + } + Write-Output "End mRemoteNG Installer Post Build" Write-Output "" diff --git a/Tools/postbuild_portable.ps1 b/Tools/postbuild_portable.ps1 index ee07771d..3d1454c3 100644 --- a/Tools/postbuild_portable.ps1 +++ b/Tools/postbuild_portable.ps1 @@ -60,11 +60,22 @@ Format-Table -AutoSize -Wrap -InputObject @{ #& "$PSScriptRoot\set_LargeAddressAware.ps1" -TargetDir $TargetDir -TargetFileName $TargetFileName #& "$PSScriptRoot\verify_LargeAddressAware.ps1" -TargetDir $TargetDir -TargetFileName $TargetFileName +if (!([string]::IsNullOrEmpty($Env:APPVEYOR_BUILD_FOLDER))) { + $postbuild_installer_executed = Get-ItemPropertyValue -Path 'HKLM:\SOFTWARE\AppVeyor_mRemoteNG' -Name postbuild_installer_executed +} else { + $postbuild_installer_executed = "" +} + +write-host "-SolutionDir $SolutionDir -TargetDir $TargetDir -ConfigurationName $ConfigurationName " + & "$PSScriptRoot\tidy_files_for_release.ps1" -TargetDir $TargetDir -ConfigurationName $ConfigurationName -& "$PSScriptRoot\sign_binaries.ps1" -TargetDir $TargetDir -CertificatePath $CertificatePath -CertificatePassword $CertificatePassword -ConfigurationName $ConfigurationName -Exclude $ExcludeFromSigning -SolutionDir $SolutionDir +if ($postbuild_installer_executed -ne "true" -or $env:postbuild_installer_executed -ne "true") { -& "$PSScriptRoot\verify_binary_signatures.ps1" -TargetDir $TargetDir -ConfigurationName $ConfigurationName -CertificatePath $CertificatePath -SolutionDir $SolutionDir + & "$PSScriptRoot\sign_binaries.ps1" -TargetDir $TargetDir -CertificatePath $CertificatePath -CertificatePassword $CertificatePassword -ConfigurationName $ConfigurationName -Exclude $ExcludeFromSigning -SolutionDir $SolutionDir + + & "$PSScriptRoot\verify_binary_signatures.ps1" -TargetDir $TargetDir -ConfigurationName $ConfigurationName -CertificatePath $CertificatePath -SolutionDir $SolutionDir +} & "$PSScriptRoot\zip_files.ps1" -SolutionDir $SolutionDir -TargetDir $TargetDir -ConfigurationName $ConfigurationName diff --git a/Tools/rename_and_copy_installer.ps1 b/Tools/rename_and_copy_installer.ps1 index bf61d721..296204e4 100644 --- a/Tools/rename_and_copy_installer.ps1 +++ b/Tools/rename_and_copy_installer.ps1 @@ -5,13 +5,17 @@ $BuildConfiguration ) +$ErrorActionPreference = "Stop" + Write-Output "" -Write-Output " /===== Begin $($PSCmdlet.MyInvocation.MyCommand) =====/" +Write-Output " /===== Begin rename_and_copy_installer =====/" $targetVersionedFile = "$SolutionDir\mRemoteNG\bin\x64\$BuildConfiguration\mRemoteNG.exe" #$fileversion = &"$SolutionDir\Tools\exes\sigcheck.exe" /accepteula -q -n $targetVersionedFile #$prodversion = ((Get-Item -Path $targetVersionedFile).VersionInfo | Select-Object -Property ProductVersion)."ProductVersion" $fileversion = ((Get-Item -Path $targetVersionedFile).VersionInfo | Select-Object -Property FileVersion)."FileVersion" + +Write-Output "fileversion: $fileversion" $msiversion = $fileversion # determine update channel @@ -26,9 +30,10 @@ if ($env:APPVEYOR_PROJECT_NAME -match "(Nightly)") { } else { } +$dstPath = "$($SolutionDir)Release" +New-Item -Path $dstPath -ItemType Directory -Force $srcMsi = $SolutionDir + "mRemoteNGInstaller\Installer\bin\x64\$BuildConfiguration\en-US\mRemoteNG-Installer.msi" -#$dstMsi = $SolutionDir + "Release\mRemoteNG-Installer-" + $msiversion + ".msi" -$dstMsi = $SolutionDir + "mRemoteNG\bin\x64\$BuildConfiguration\mRemoteNG-Installer-" + $msiversion + ".msi" +$dstMsi = $dstPath + "\mRemoteNG-Installer-" + $msiversion + ".msi" #$srcSymbols = $SolutionDir + "mRemoteNGInstaller\Installer\bin\x64\$BuildConfiguration\en-US\mRemoteNG-Installer-Symbols*.zip" #$dstSymbols = $SolutionDir + "Release\mRemoteNG-Installer-Symbols-" + $msiversion + ".zip" @@ -39,15 +44,18 @@ Write-Output "" # Copy file try { - Copy-Item $srcMsi -Destination $dstMsi -Force -errorAction stop + Copy-Item $srcMsi -Destination $dstMsi -Force -ErrorAction Stop + #Copy-Item $srcSymbols -Destination $dstSymbols -Force -ErrorAction Stop Write-Host " [Success!]" -ForegroundColor green } catch { Write-Host " [Failure!]" -ForegroundColor red + Write-Output $Error[0] + $PSCmdlet.ThrowTerminatingError() } -#Copy-Item $srcSymbols -Destination $dstSymbols -Force + Write-Output "" -Write-Output " /===== End $($PSCmdlet.MyInvocation.MyCommand) =====/" +Write-Output " /===== End rename_and_copy_installer.ps1 =====/" Write-Output "" diff --git a/Tools/sign_binaries.ps1 b/Tools/sign_binaries.ps1 index 71c1434b..15eb8c74 100644 --- a/Tools/sign_binaries.ps1 +++ b/Tools/sign_binaries.ps1 @@ -31,59 +31,73 @@ $timeserver = "http://timestamp.verisign.com/scripts/timstamp.dll" $IsAppVeyor = !([string]::IsNullOrEmpty($Env:APPVEYOR_BUILD_FOLDER)) -# validate release versions and if the certificate value was passed -if ($ConfigurationName -match "Release" -And ($CertificatePath)) { +try { + # validate release versions and if the certificate value was passed + if ($ConfigurationName -match "Release" -And ($CertificatePath)) { - if($IsAppVeyor) { - $CertificatePath = Join-Path -Path $SolutionDir -ChildPath $CertificatePath + if($IsAppVeyor) { + $CertificatePath = Join-Path -Path $SolutionDir -ChildPath $CertificatePath + # Write-Output "Decrypt Cert" + # & appveyor-tools\secure-file -decrypt "$($Env:cert_path).enc" -secret "$Env:cert_decrypt_pwd" + # if(-Not (Test-Path $Env:cert_path)) { + # Write-Output "decrypt cert does not exist..." + # Throw "Could not decrypt cert" + # } + # Write-Output "Restoring NuGets" + } + + # make sure the cert is actually available + if ($CertificatePath -eq "" -or !(Test-Path -Path $CertificatePath -PathType Leaf)) + { + Write-Output "Certificate is not present - we won't sign files." + return + } + + if ($CertificatePassword -eq "") { + Write-Output "No certificate password was provided - we won't sign files." + return + } + + try { + $certKeyStore = [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::MachineKeySet + $cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($CertificatePath, $CertificatePassword, $certKeyStore) -ErrorAction Stop + } catch { + Write-Output "Error loading certificate file - we won't sign files." + Write-Output $Error[0] + return + } + + # Sign MSI if we are building a release version and the certificate is available + Write-Output "Signing Binaries" + Write-Output "Getting files from path: $TargetDir" + $signableFiles = Get-ChildItem -Path $TargetDir -Recurse | ?{$_.Extension -match "dll|exe|msi"} | ?{$Exclude -notcontains $_.Name} + + $excluded_files = Get-ChildItem -Path $TargetDir -Recurse | ?{$_.Extension -match "dll|exe|msi"} | ?{$Exclude -contains $_.Name} + $excluded_files | ForEach-Object ` + -Begin { Write-Output "The following files were excluded from signing due to being on the exclusion list:" } ` + -Process { Write-Output "-- $($_.FullName)" } + + Write-Output "Signable files count: $($signableFiles.Count)" + + + foreach ($file in $signableFiles) { + Set-AuthenticodeSignature -Certificate $cert -TimestampServer $timeserver -IncludeChain all -FilePath $file.FullName + } + + + # Release certificate + if ($null -ne $cert) { + $cert.Dispose() + } + } else { + Write-Output "This is not a release build or CertificatePath wasn't provided - we won't sign files." + Write-Output "Config: $($ConfigurationName)`tCertPath: $($CertificatePath)" } - - # make sure the cert is actually available - if ($CertificatePath -eq "" -or !(Test-Path -Path $CertificatePath -PathType Leaf)) - { - Write-Output "Certificate is not present - we won't sign files." - return - } - - if ($CertificatePassword -eq "") { - Write-Output "No certificate password was provided - we won't sign files." - return - } - - try { - $certKeyStore = [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::MachineKeySet - $cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($CertificatePath, $CertificatePassword, $certKeyStore) -ErrorAction Stop - } catch { - Write-Output "Error loading certificate file - we won't sign files." - Write-Output $Error[0] - return - } - - # Sign MSI if we are building a release version and the certificate is available - Write-Output "Signing Binaries" - Write-Output "Getting files from path: $TargetDir" - $signableFiles = Get-ChildItem -Path $TargetDir -Recurse | ?{$_.Extension -match "dll|exe|msi"} | ?{$Exclude -notcontains $_.Name} - - $excluded_files = Get-ChildItem -Path $TargetDir -Recurse | ?{$_.Extension -match "dll|exe|msi"} | ?{$Exclude -contains $_.Name} - $excluded_files | ForEach-Object ` - -Begin { Write-Output "The following files were excluded from signing due to being on the exclusion list:" } ` - -Process { Write-Output "-- $($_.FullName)" } - - Write-Output "Signable files count: $($signableFiles.Count)" - - - foreach ($file in $signableFiles) { - Set-AuthenticodeSignature -Certificate $cert -TimestampServer $timeserver -IncludeChain all -FilePath $file.FullName - } - - - # Release certificate - if ($null -ne $cert) { - $cert.Dispose() - } -} else { - Write-Output "This is not a release build or CertificatePath wasn't provided - we won't sign files." - Write-Output "Config: $($ConfigurationName)`tCertPath: $($CertificatePath)" + +} +catch { + Write-Output $Error[0] } +Write-Output "End $($PSCmdlet.MyInvocation.MyCommand)" Write-Output "" diff --git a/Tools/update_and_upload_assemblyinfocs.ps1 b/Tools/update_and_upload_assemblyinfocs.ps1 new file mode 100644 index 00000000..d78cecce --- /dev/null +++ b/Tools/update_and_upload_assemblyinfocs.ps1 @@ -0,0 +1,52 @@ +#Requires -Version 4.0 + +Write-Output "" +Write-Output "===== Begin $($PSCmdlet.MyInvocation.MyCommand) =====" + +$MainRepository = $Env:APPVEYOR_REPO_NAME.Split("/\")[1] +$IsAppVeyor = !([string]::IsNullOrEmpty($Env:APPVEYOR_BUILD_FOLDER)) + + +if ($IsAppVeyor) { + + # determine update channel + if ($env:APPVEYOR_PROJECT_NAME -match "(Nightly)") { + Write-Output "UpdateChannel = Nightly" + $UpdateChannel = "Nightly" + $ModifiedTagName = "$PreTagName-$TagName-NB" + } elseif ($env:APPVEYOR_PROJECT_NAME -match "(Preview)") { + Write-Output "UpdateChannel = Preview" + $UpdateChannel = "Preview" + $ModifiedTagName = "v$TagName-PB" + } elseif ($env:APPVEYOR_PROJECT_NAME -match "(Stable)") { + Write-Output "UpdateChannel = Stable" + $UpdateChannel = "Stable" + $ModifiedTagName = "v" + $TagName.Split("-")[0] + } else { + $UpdateChannel = "" + } + + if ($UpdateChannel -ne "" -and $MainRepository -ne "" ) { + + # commit AssemblyInfo.cs change + Write-Output "publish AssemblyInfo.cs" + + $buildFolder = Join-Path -Path $PSScriptRoot -ChildPath "..\" -Resolve -ErrorAction Ignore + + if (Test-Path -Path "$buildFolder\mRemoteNG\Properties\AssemblyInfo.cs") { + + $assemblyinfocs_content = [System.String]::Join("`r`n", (Get-Content "$buildFolder\mRemoteNG\Properties\AssemblyInfo.cs")) + + Set-GitHubContent -OwnerName $MainRepository -RepositoryName $MainRepository -Path "mRemoteNG\Properties\AssemblyInfo.cs" -CommitMessage "AssemblyInfo.cs updated for $UpdateChannel $ModifiedTagName" -Content $assemblyinfocs_content -BranchName main + + Write-Output "publish completed" + + } + } else { + Write-Output "Source folder not found" + } +} + + +Write-Output "End $($PSCmdlet.MyInvocation.MyCommand)" +Write-Output "" diff --git a/Tools/update_and_upload_website_release_json_file.ps1 b/Tools/update_and_upload_website_release_json_file.ps1 index bf2d3ef6..248c50ac 100644 --- a/Tools/update_and_upload_website_release_json_file.ps1 +++ b/Tools/update_and_upload_website_release_json_file.ps1 @@ -44,128 +44,133 @@ if ($env:APPVEYOR_PROJECT_NAME -match "(Nightly)") { $UpdateChannel = "" } -#$buildFolder = Join-Path -Path $PSScriptRoot -ChildPath "..\mRemoteNG\bin\x64\Release" -Resolve -ErrorAction Ignore -$ReleaseFolder = Join-Path -Path $PSScriptRoot -ChildPath "..\Release" -Resolve +$IsAppVeyor = !([string]::IsNullOrEmpty($Env:APPVEYOR_BUILD_FOLDER)) -if ($UpdateChannel -ne "" -and $ReleaseFolder -ne "" -and $MainRepository -ne "" -and $WebsiteTargetOwner -ne "" -and $WebsiteTargetRepository -ne "" ) { +if ($IsAppVeyor) { - $published_at = (Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ") - - # get releases.json from github - $releases_json = Get-GitHubContent -OwnerName $WebsiteTargetOwner -RepositoryName $WebsiteTargetRepository -Path _data\releases.json - ConvertFrom-Base64($releases_json.content) | Out-File -FilePath "$ReleaseFolder\releases.json" - $websiteJsonReleaseFile = Get-ChildItem -Path "$ReleaseFolder\releases.json" + #$buildFolder = Join-Path -Path $PSScriptRoot -ChildPath "..\mRemoteNG\bin\x64\Release" -Resolve -ErrorAction Ignore + $ReleaseFolder = Join-Path -Path $PSScriptRoot -ChildPath "..\Release" -Resolve - # installer - $msiFile = Get-ChildItem -Path "$ReleaseFolder\*.msi" | Sort-Object LastWriteTime | Select-Object -last 1 - if (![string]::IsNullOrEmpty($msiFile)) { - Write-Output "UpdateChannel: $UpdateChannel" - Write-Output "msiFile: $msiFile" - $checksum = (Get-FileHash $msiFile -Algorithm SHA512).Hash - $file_size = (Get-ChildItem $msiFile).Length - $a = Get-Content $websiteJsonReleaseFile | ConvertFrom-Json - switch ($UpdateChannel) { - "Nightly" { - $GithubTag = "$((Get-Date).ToUniversalTime().ToString("yyyyMMdd"))-$TagName-NB" - $html_url = "https://github.com/$WebsiteTargetOwner/$MainRepository/releases/tag/$GithubTag" - $browser_download_url = "https://github.com/$WebsiteTargetOwner/$MainRepository/releases/download/$GithubTag/$($msiFile.Name)" - $a.nightlybuild.name = "v$TagName-NB" - $a.nightlybuild.published_at = $published_at - $a.nightlybuild.html_url = $html_url - $a.nightlybuild.assets.installer.browser_download_url = $browser_download_url - $a.nightlybuild.assets.installer.checksum = $checksum - $a.nightlybuild.assets.installer.size = $file_size - break - } - "Preview" { - $GithubTag = "$TagName-PB" - $html_url = "https://github.com/$WebsiteTargetOwner/$MainRepository/releases/tag/$GithubTag" - $browser_download_url = "https://github.com/$WebsiteTargetOwner/$MainRepository/releases/download/$GithubTag/$($msiFile.Name)" - $a.prerelease.name = "v$TagName-PB" - $a.prerelease.published_at = $published_at - $a.prerelease.html_url = $html_url - $a.prerelease.assets.installer.browser_download_url = $browser_download_url - $a.prerelease.assets.installer.checksum = $checksum - $a.prerelease.assets.installer.size = $file_size - break - } - "Stable" { - $GithubTag = "$TagName" - $html_url = "https://github.com/$WebsiteTargetOwner/$MainRepository/releases/tag/$GithubTag" - $browser_download_url = "https://github.com/$WebsiteTargetOwner/$MainRepository/releases/download/$GithubTag/$($msiFile.Name)" - $a.stable.name = "v$TagName" - $a.stable.published_at = $published_at - $a.stable.html_url = $html_url - $a.stable.assets.installer.browser_download_url = $browser_download_url - $a.stable.assets.installer.checksum = $checksum - $a.stable.assets.installer.size = $file_size - break + if ($UpdateChannel -ne "" -and $ReleaseFolder -ne "" -and $MainRepository -ne "" -and $WebsiteTargetOwner -ne "" -and $WebsiteTargetRepository -ne "" ) { + + $published_at = (Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ") + + # get releases.json from github + $releases_json = Get-GitHubContent -OwnerName $WebsiteTargetOwner -RepositoryName $WebsiteTargetRepository -Path _data\releases.json + ConvertFrom-Base64($releases_json.content) | Out-File -FilePath "$ReleaseFolder\releases.json" + $websiteJsonReleaseFile = Get-ChildItem -Path "$ReleaseFolder\releases.json" + + # installer + $msiFile = Get-ChildItem -Path "$ReleaseFolder\*.msi" | Sort-Object LastWriteTime | Select-Object -last 1 + if (![string]::IsNullOrEmpty($msiFile)) { + Write-Output "UpdateChannel: $UpdateChannel" + Write-Output "msiFile: $msiFile" + $checksum = (Get-FileHash $msiFile -Algorithm SHA512).Hash + $file_size = (Get-ChildItem $msiFile).Length + $a = Get-Content $websiteJsonReleaseFile | ConvertFrom-Json + switch ($UpdateChannel) { + "Nightly" { + $GithubTag = "$((Get-Date).ToUniversalTime().ToString("yyyyMMdd"))-$TagName-NB" + $html_url = "https://github.com/$WebsiteTargetOwner/$MainRepository/releases/tag/$GithubTag" + $browser_download_url = "https://github.com/$WebsiteTargetOwner/$MainRepository/releases/download/$GithubTag/$($msiFile.Name)" + $a.nightlybuild.name = "v$TagName-NB" + $a.nightlybuild.published_at = $published_at + $a.nightlybuild.html_url = $html_url + $a.nightlybuild.assets.installer.browser_download_url = $browser_download_url + $a.nightlybuild.assets.installer.checksum = $checksum + $a.nightlybuild.assets.installer.size = $file_size + break + } + "Preview" { + $GithubTag = "$TagName-PB" + $html_url = "https://github.com/$WebsiteTargetOwner/$MainRepository/releases/tag/$GithubTag" + $browser_download_url = "https://github.com/$WebsiteTargetOwner/$MainRepository/releases/download/$GithubTag/$($msiFile.Name)" + $a.prerelease.name = "v$TagName-PB" + $a.prerelease.published_at = $published_at + $a.prerelease.html_url = $html_url + $a.prerelease.assets.installer.browser_download_url = $browser_download_url + $a.prerelease.assets.installer.checksum = $checksum + $a.prerelease.assets.installer.size = $file_size + break + } + "Stable" { + $GithubTag = "$TagName" + $html_url = "https://github.com/$WebsiteTargetOwner/$MainRepository/releases/tag/$GithubTag" + $browser_download_url = "https://github.com/$WebsiteTargetOwner/$MainRepository/releases/download/$GithubTag/$($msiFile.Name)" + $a.stable.name = "v$TagName" + $a.stable.published_at = $published_at + $a.stable.html_url = $html_url + $a.stable.assets.installer.browser_download_url = $browser_download_url + $a.stable.assets.installer.checksum = $checksum + $a.stable.assets.installer.size = $file_size + break + } } } - } - # portable - $zipFile = Get-ChildItem -Path "$ReleaseFolder\*.zip" -Exclude "*-symbols-*.zip" | Sort-Object LastWriteTime | Select-Object -last 1 - if (![string]::IsNullOrEmpty($zipFile)) { - Write-Output "UpdateChannel: $UpdateChannel" - Write-Output "zipFile: $zipFile" - $checksum = (Get-FileHash $zipFile -Algorithm SHA512).Hash - $file_size = (Get-ChildItem $zipFile).Length - $a = Get-Content $websiteJsonReleaseFile | ConvertFrom-Json - switch ($UpdateChannel) { - "Nightly" { - $GithubTag = "$((Get-Date).ToUniversalTime().ToString("yyyyMMdd"))-$TagName-NB" - $html_url = "https://github.com/$WebsiteTargetOwner/$MainRepository/releases/tag/$GithubTag" - $browser_download_url = "https://github.com/$WebsiteTargetOwner/$MainRepository/releases/download/$GithubTag/$($zipFile.Name)" - $a.nightlybuild.name = "v$TagName-NB" - $a.nightlybuild.published_at = $published_at - $a.nightlybuild.html_url = $html_url - $a.nightlybuild.assets.portable.browser_download_url = $browser_download_url - $a.nightlybuild.assets.portable.checksum = $checksum - $a.nightlybuild.assets.portable.size = $file_size - break - } - "Preview" { - $GithubTag = "$TagName-PB" - $html_url = "https://github.com/$WebsiteTargetOwner/$MainRepository/releases/tag/$GithubTag" - $browser_download_url = "https://github.com/$WebsiteTargetOwner/$MainRepository/releases/download/$GithubTag/$($zipFile.Name)" - $a.prerelease.name = "v$TagName-PB" - $a.prerelease.published_at = $published_at - $a.prerelease.html_url = $html_url - $a.prerelease.assets.portable.browser_download_url = $browser_download_url - $a.prerelease.assets.portable.checksum = $checksum - $a.prerelease.assets.portable.size = $file_size - break - } - "Stable" { - $GithubTag = "$TagName" - $html_url = "https://github.com/$WebsiteTargetOwner/$MainRepository/releases/tag/$GithubTag" - $browser_download_url = "https://github.com/$WebsiteTargetOwner/$MainRepository/releases/download/$GithubTag/$($zipFile.Name)" - $a.stable.name = "v$TagName" - $a.stable.published_at = $published_at - $a.stable.html_url = $html_url - $a.stable.assets.portable.browser_download_url = $browser_download_url - $a.stable.assets.portable.checksum = $checksum - $a.stable.assets.portable.size = $file_size - break + # portable + $zipFile = Get-ChildItem -Path "$ReleaseFolder\*.zip" -Exclude "*-symbols-*.zip" | Sort-Object LastWriteTime | Select-Object -last 1 + if (![string]::IsNullOrEmpty($zipFile)) { + Write-Output "UpdateChannel: $UpdateChannel" + Write-Output "zipFile: $zipFile" + $checksum = (Get-FileHash $zipFile -Algorithm SHA512).Hash + $file_size = (Get-ChildItem $zipFile).Length + $a = Get-Content $websiteJsonReleaseFile | ConvertFrom-Json + switch ($UpdateChannel) { + "Nightly" { + $GithubTag = "$((Get-Date).ToUniversalTime().ToString("yyyyMMdd"))-$TagName-NB" + $html_url = "https://github.com/$WebsiteTargetOwner/$MainRepository/releases/tag/$GithubTag" + $browser_download_url = "https://github.com/$WebsiteTargetOwner/$MainRepository/releases/download/$GithubTag/$($zipFile.Name)" + $a.nightlybuild.name = "v$TagName-NB" + $a.nightlybuild.published_at = $published_at + $a.nightlybuild.html_url = $html_url + $a.nightlybuild.assets.portable.browser_download_url = $browser_download_url + $a.nightlybuild.assets.portable.checksum = $checksum + $a.nightlybuild.assets.portable.size = $file_size + break + } + "Preview" { + $GithubTag = "$TagName-PB" + $html_url = "https://github.com/$WebsiteTargetOwner/$MainRepository/releases/tag/$GithubTag" + $browser_download_url = "https://github.com/$WebsiteTargetOwner/$MainRepository/releases/download/$GithubTag/$($zipFile.Name)" + $a.prerelease.name = "v$TagName-PB" + $a.prerelease.published_at = $published_at + $a.prerelease.html_url = $html_url + $a.prerelease.assets.portable.browser_download_url = $browser_download_url + $a.prerelease.assets.portable.checksum = $checksum + $a.prerelease.assets.portable.size = $file_size + break + } + "Stable" { + $GithubTag = "$TagName" + $html_url = "https://github.com/$WebsiteTargetOwner/$MainRepository/releases/tag/$GithubTag" + $browser_download_url = "https://github.com/$WebsiteTargetOwner/$MainRepository/releases/download/$GithubTag/$($zipFile.Name)" + $a.stable.name = "v$TagName" + $a.stable.published_at = $published_at + $a.stable.html_url = $html_url + $a.stable.assets.portable.browser_download_url = $browser_download_url + $a.stable.assets.portable.checksum = $checksum + $a.stable.assets.portable.size = $file_size + break + } } } - } - $a | ConvertTo-Json -Depth 10 | Set-Content $websiteJsonReleaseFile + $a | ConvertTo-Json -Depth 10 | Set-Content $websiteJsonReleaseFile - # commit releases.json change - if ($env:WEBSITE_UPDATE_ENABLED.ToLower() -eq "true") { - Write-Output "publish releases.json" - if (Test-Path -Path "$ReleaseFolder\releases.json") { - $releases_json_string = Get-Content "$ReleaseFolder\releases.json" | Out-String - Set-GitHubContent -OwnerName $WebsiteTargetOwner -RepositoryName $WebsiteTargetRepository -Path _data\releases.json -CommitMessage "Updated for $UpdateChannel $ModifiedTagName" -Content $releases_json_string -BranchName main - Write-Output "publish completed" + # commit releases.json change + if ($env:WEBSITE_UPDATE_ENABLED.ToLower() -eq "true") { + Write-Output "publish releases.json" + if (Test-Path -Path "$ReleaseFolder\releases.json") { + $releases_json_string = Get-Content "$ReleaseFolder\releases.json" | Out-String + Set-GitHubContent -OwnerName $WebsiteTargetOwner -RepositoryName $WebsiteTargetRepository -Path _data\releases.json -CommitMessage "Updated for $UpdateChannel $ModifiedTagName" -Content $releases_json_string -BranchName main + Write-Output "publish completed" + } } + } else { + Write-Output "ReleaseFolder not found" } -} else { - Write-Output "ReleaseFolder not found" } diff --git a/Tools/zip_files.ps1 b/Tools/zip_files.ps1 index 7e8e3b4a..e82e8d77 100644 --- a/Tools/zip_files.ps1 +++ b/Tools/zip_files.ps1 @@ -18,10 +18,11 @@ Write-Output "===== Begin $($PSCmdlet.MyInvocation.MyCommand) =====" $IsAppVeyor = !([string]::IsNullOrEmpty($Env:APPVEYOR_BUILD_FOLDER)) $ConfigurationName = $ConfigurationName.Trim() -Write-Output "Config Name (trimmed): '$($ConfigurationName)'" $exe = Join-Path -Path $TargetDir -ChildPath $TargetFileName -$version = ((Get-Item -Path $exe).VersionInfo | Select-Object -Property ProductVersion)."ProductVersion" -Write-Output "Version is $($version)" +#$version = ((Get-Item -Path $exe).VersionInfo | Select-Object -Property ProductVersion)."ProductVersion" +$version = $(Get-Item -Path $exe).VersionInfo.FileVersion +Write-Output "FileVersion: $version" + # determine update channel if ($env:APPVEYOR_PROJECT_NAME -match "(Nightly)") { @@ -44,57 +45,49 @@ if($IsAppVeyor) { } # Package debug symbols zip file -if ($ConfigurationName -match "Release") { - - Write-Output "Packaging debug symbols" - - if ($ConfigurationName -match "Portable") { - $zipFilePrefix = "mRemoteNG-Portable-symbols" - } else { - $zipFilePrefix = "mRemoteNG-Installer-symbols" +Write-Output "Packaging debug symbols" +$zipFilePrefix = "mRemoteNG-symbols" +$pdbFiles = Get-ChildItem -Path $SolutionDir -Filter *.pdb -Recurse +$tempPdbPath = (New-TemporaryDirectory)[0] +foreach ($pdbFile in $pdbFiles) { + if (($pdbFile.FullName).Contains("\$ConfigurationName\")) { + Copy-Item $pdbFile.FullName -Destination $tempPdbPath -Force } - - $debugFile = Join-Path -Path $TargetDir -ChildPath "mRemoteNG.pdb" - - # AppVeyor build - if ($IsAppVeyor) { - $outputZipPath = Join-Path -Path $SolutionDir -ChildPath "Release\$zipFilePrefix-$($ModifiedVersion).zip" - 7z a $outputZipPath $debugFile - } - # Local build - else { - if (!(Test-Path -Path $debugFile -PathType Leaf)) - { - $outputZipPath = "$($SolutionDir)Release\$zipFilePrefix-$($ModifiedVersion).zip" - Compress-Archive $debugFile $outputZipPath -Force - } else { - Write-Output "File do not exist:" $debugFile", nothing to compress" - } - } - - Remove-Item $debugFile } +if ($IsAppVeyor) { + # AppVeyor build + $outputZipPath = Join-Path -Path $SolutionDir -ChildPath "Release\$zipFilePrefix-$($ModifiedVersion).zip" + Write-Output "outputZipPath: $outputZipPath" + 7z a $outputZipPath "$tempPdbPath\*.pdb" +} +# else { +# # Local build +# $outputZipPath = "$($SolutionDir)Release\$zipFilePrefix-$($ModifiedVersion).zip" +# Write-Output "outputZipPath: $outputZipPath" +# Compress-Archive -Path $tempPdbPath -DestinationPath $outputZipPath -Force +# } + + # Package portable release zip file -if ($ConfigurationName -eq "Release Portable") { - Write-Output "Packaging portable ZIP file" - - # AppVeyor build - if ($IsAppVeyor) { - $outputZipPath = Join-Path -Path $SolutionDir -ChildPath "Release\mRemoteNG-Portable-$($ModifiedVersion).zip" - 7z a -bt -bd -bb1 -mx=9 -tzip -y -r $outputZipPath $TargetDir\* - } - # Local build - else { - if ($Source) - { - $outputZipPath="$($SolutionDir)\Release\mRemoteNG-Portable-$($ModifiedVersion).zip" - Compress-Archive $Source $outputZipPath -Force - } else { - Write-Output "File do not exist:" $Source", nothing to compress" - } +Write-Output "Packaging portable ZIP file" +# AppVeyor build +if ($IsAppVeyor) { + $outputZipPath = Join-Path -Path $SolutionDir -ChildPath "Release\mRemoteNG-Portable-$($ModifiedVersion).zip" + 7z a -bt -bd -bb1 -mx=9 -tzip -y -r $outputZipPath $TargetDir\* + Write-Output "Portable ZIP: $outputZipPath" +} +# Local build +else { + if ($Source) + { + $outputZipPath="$($SolutionDir)\Release\mRemoteNG-Portable-$($ModifiedVersion).zip" + Compress-Archive $Source $outputZipPath -Force + } else { + Write-Output "Files do not exist:" $Source", nothing to compress" } } + Write-Output "End $($PSCmdlet.MyInvocation.MyCommand)" Write-Output "" diff --git a/mRemoteNG.sln b/mRemoteNG.sln index fbb060a2..7dc3c89b 100644 --- a/mRemoteNG.sln +++ b/mRemoteNG.sln @@ -27,8 +27,7 @@ Global Debug Installer|x64 = Debug Installer|x64 Debug Portable|x64 = Debug Portable|x64 Debug|x64 = Debug|x64 - Release Installer|x64 = Release Installer|x64 - Release Portable|x64 = Release Portable|x64 + Release Installer and Portable|x64 = Release Installer and Portable|x64 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution @@ -38,42 +37,34 @@ Global {4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug Portable|x64.Build.0 = Debug Portable|x64 {4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug|x64.ActiveCfg = Debug|x64 {4934A491-40BC-4E5B-9166-EA1169A220F6}.Debug|x64.Build.0 = Debug|x64 - {4934A491-40BC-4E5B-9166-EA1169A220F6}.Release Installer|x64.ActiveCfg = Release|x64 - {4934A491-40BC-4E5B-9166-EA1169A220F6}.Release Installer|x64.Build.0 = Release|x64 - {4934A491-40BC-4E5B-9166-EA1169A220F6}.Release Portable|x64.ActiveCfg = Release Portable|x64 - {4934A491-40BC-4E5B-9166-EA1169A220F6}.Release Portable|x64.Build.0 = Release Portable|x64 + {4934A491-40BC-4E5B-9166-EA1169A220F6}.Release Installer and Portable|x64.ActiveCfg = Release|x64 + {4934A491-40BC-4E5B-9166-EA1169A220F6}.Release Installer and Portable|x64.Build.0 = Release|x64 {4934A491-40BC-4E5B-9166-EA1169A220F6}.Release|x64.ActiveCfg = Release|x64 {4934A491-40BC-4E5B-9166-EA1169A220F6}.Release|x64.Build.0 = Release|x64 {1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug Installer|x64.ActiveCfg = Debug|x64 {1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug Portable|x64.ActiveCfg = Debug Portable|x64 {1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug|x64.ActiveCfg = Debug|x64 - {1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release Installer|x64.ActiveCfg = Release|x64 - {1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release Portable|x64.ActiveCfg = Release Portable|x64 - {1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release Portable|x64.Build.0 = Release Portable|x64 + {1453B37F-8621-499E-B0B2-6091F76DC0BB}.Debug|x64.Build.0 = Debug|x64 + {1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release Installer and Portable|x64.ActiveCfg = Release|x64 {1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release|x64.ActiveCfg = Release|x64 - {1453B37F-8621-499E-B0B2-6091F76DC0BB}.Release|x64.Build.0 = Release|x64 {5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug Installer|x64.ActiveCfg = Debug|x64 {5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug Installer|x64.Build.0 = Debug|x64 {5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug Portable|x64.ActiveCfg = Debug Portable|x64 {5423D985-CB48-4344-B47F-E8C6D60C8B04}.Debug|x64.ActiveCfg = Debug|x64 - {5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release Installer|x64.ActiveCfg = Release|x64 - {5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release Installer|x64.Build.0 = Release|x64 - {5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release Portable|x64.ActiveCfg = Release Portable|x64 + {5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release Installer and Portable|x64.ActiveCfg = Release|x64 + {5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release Installer and Portable|x64.Build.0 = Release|x64 {5423D985-CB48-4344-B47F-E8C6D60C8B04}.Release|x64.ActiveCfg = Release|x64 {F0168B9F-6815-40DF-BA53-46CEE7683B68}.Debug Installer|x64.ActiveCfg = Debug|x64 {F0168B9F-6815-40DF-BA53-46CEE7683B68}.Debug Installer|x64.Build.0 = Debug|x64 {F0168B9F-6815-40DF-BA53-46CEE7683B68}.Debug Portable|x64.ActiveCfg = Debug Portable|x64 {F0168B9F-6815-40DF-BA53-46CEE7683B68}.Debug|x64.ActiveCfg = Debug|x64 - {F0168B9F-6815-40DF-BA53-46CEE7683B68}.Release Installer|x64.ActiveCfg = Release|x64 - {F0168B9F-6815-40DF-BA53-46CEE7683B68}.Release Installer|x64.Build.0 = Release|x64 - {F0168B9F-6815-40DF-BA53-46CEE7683B68}.Release Portable|x64.ActiveCfg = Release Portable|x64 + {F0168B9F-6815-40DF-BA53-46CEE7683B68}.Release Installer and Portable|x64.ActiveCfg = Release|x64 + {F0168B9F-6815-40DF-BA53-46CEE7683B68}.Release Installer and Portable|x64.Build.0 = Release|x64 {F0168B9F-6815-40DF-BA53-46CEE7683B68}.Release|x64.ActiveCfg = Release|x64 - {F0168B9F-6815-40DF-BA53-46CEE7683B68}.Release|x64.Build.0 = Release|x64 {16AA21E2-D6B7-427D-AB7D-AA8C611B724E}.Debug Installer|x64.ActiveCfg = Debug|x64 {16AA21E2-D6B7-427D-AB7D-AA8C611B724E}.Debug Portable|x64.ActiveCfg = Debug Portable|x64 {16AA21E2-D6B7-427D-AB7D-AA8C611B724E}.Debug|x64.ActiveCfg = Debug|x64 - {16AA21E2-D6B7-427D-AB7D-AA8C611B724E}.Release Installer|x64.ActiveCfg = Release|x64 - {16AA21E2-D6B7-427D-AB7D-AA8C611B724E}.Release Portable|x64.ActiveCfg = Release Portable|x64 + {16AA21E2-D6B7-427D-AB7D-AA8C611B724E}.Release Installer and Portable|x64.ActiveCfg = Release|x64 {16AA21E2-D6B7-427D-AB7D-AA8C611B724E}.Release|x64.ActiveCfg = Release|x64 {A56A2029-79B8-492A-ABE5-D2BFE05801BD}.Debug Installer|x64.ActiveCfg = Debug|x64 {A56A2029-79B8-492A-ABE5-D2BFE05801BD}.Debug Installer|x64.Build.0 = Debug|x64 @@ -81,10 +72,8 @@ Global {A56A2029-79B8-492A-ABE5-D2BFE05801BD}.Debug Portable|x64.Build.0 = Debug Portable|x64 {A56A2029-79B8-492A-ABE5-D2BFE05801BD}.Debug|x64.ActiveCfg = Debug|x64 {A56A2029-79B8-492A-ABE5-D2BFE05801BD}.Debug|x64.Build.0 = Debug|x64 - {A56A2029-79B8-492A-ABE5-D2BFE05801BD}.Release Installer|x64.ActiveCfg = Release|x64 - {A56A2029-79B8-492A-ABE5-D2BFE05801BD}.Release Installer|x64.Build.0 = Release|x64 - {A56A2029-79B8-492A-ABE5-D2BFE05801BD}.Release Portable|x64.ActiveCfg = Release Portable|x64 - {A56A2029-79B8-492A-ABE5-D2BFE05801BD}.Release Portable|x64.Build.0 = Release Portable|x64 + {A56A2029-79B8-492A-ABE5-D2BFE05801BD}.Release Installer and Portable|x64.ActiveCfg = Release|x64 + {A56A2029-79B8-492A-ABE5-D2BFE05801BD}.Release Installer and Portable|x64.Build.0 = Release|x64 {A56A2029-79B8-492A-ABE5-D2BFE05801BD}.Release|x64.ActiveCfg = Release|x64 {A56A2029-79B8-492A-ABE5-D2BFE05801BD}.Release|x64.Build.0 = Release|x64 EndGlobalSection diff --git a/mRemoteNG/mRemoteNG.csproj b/mRemoteNG/mRemoteNG.csproj index b9f231d1..1ae71a13 100644 --- a/mRemoteNG/mRemoteNG.csproj +++ b/mRemoteNG/mRemoteNG.csproj @@ -23,6 +23,7 @@ https://github.com/mRemoteNG/mRemoteNG.git git mRemoteNG.App.ProgramRoot + True DEBUG @@ -41,7 +42,7 @@ False 7 - False + True DEBUG;PORTABLE @@ -60,13 +61,13 @@ False 7 - False + True False True 7 - False + True @@ -486,7 +487,7 @@ - + diff --git a/mRemoteNGInstaller/Installer/Fragments/FilesFragment.wxs b/mRemoteNGInstaller/Installer/Fragments/FilesFragment.wxs index 72761ffd..974969e6 100644 --- a/mRemoteNGInstaller/Installer/Fragments/FilesFragment.wxs +++ b/mRemoteNGInstaller/Installer/Fragments/FilesFragment.wxs @@ -115,6 +115,9 @@ + + + @@ -420,6 +423,9 @@ + + +