<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/"><channel><atom:link href="https://www.finalbuilder.com/DesktopModules/LiveBlog/API/Syndication/GetRssFeeds?Category=windows&amp;mid=632&amp;PortalId=0&amp;tid=181&amp;ItemCount=20" rel="self" type="application/rss+xml" /><title>VSoft Technologies Blogs</title><description>VSoft Technologies Blogs - posts about our products and software development.</description><link>https://www.finalbuilder.com/resources/blogs</link><item><title>Signing .rdp files with Signotaur (and surviving the April Windows update)</title><link>https://www.finalbuilder.com/resources/blogs/postid/882/signing-rdp-files-with-signotaur-and-surviving-the-april-windows-update</link><category>.NET,Code Signing,DelphiSignotaur,Windows</category><pubDate>Fri, 24 Apr 2026 02:27:48 GMT</pubDate><description>&lt;style type="text/css"&gt;div.blog_content h1 { font-size: 1.9rem; margin-bottom: 0.3rem; }
    div.blog_content h2 { font-size: 1.4rem; margin-top: 2.2rem; border-bottom: 1px solid #e0e0e0; padding-bottom: 0.4rem; }
    div.blog_content h3 { font-size: 1.15rem; margin-top: 1.6rem; color: #222;}
    div.blog_content strong {  font-weight: 600;  color: #888;}
    div.blog_content .meta { color: #777; font-size: 0.9rem; margin-bottom: 2rem; }
    div.blog_content code { background: #f4f4f4; padding: 0.15em 0.4em; border-radius: 3px; font-size: 0.92em; }
    div.blog_content pre { background: #f4f4f4; padding: 1rem; border-radius: 5px; overflow-x: auto; }
    div.blog_content pre code { background: none; padding: 0; }
    div.blog_content a { color: #0066cc; }
    div.blog_content img { max-width: 100%; border: 1px solid #ddd; border-radius: 4px; margin: 1rem 0; }
    div.blog_content .note { background: #eef6ff; border-left: 4px solid #0066cc; padding: 0.8rem 1rem; margin: 1.2rem 0; border-radius: 0 4px 4px 0; }
    div.blog_content ol { margin: 1rem 0 1.5rem 1.5rem; padding-left: 0.5rem;}
    div.blog_content ol li {  margin-bottom: 0.7rem;  line-height: 1.6;}
    div.blog_content ol li strong {  font-weight: 600;}
    div.blog_content ul li {  margin-bottom: 0.45rem;}
&lt;/style&gt;
&lt;div class="note"&gt;&lt;strong&gt;In this article:&lt;/strong&gt;
&lt;ul&gt;
	&lt;li&gt;What changed for signed &lt;code&gt;.rdp&lt;/code&gt; files in the April 2026 Windows update&lt;/li&gt;
	&lt;li&gt;Why previously-working signatures now show an orange warning dialog&lt;/li&gt;
	&lt;li&gt;The registry policy recipient machines need for no dialog at all&lt;/li&gt;
	&lt;li&gt;How Signotaur signs &lt;code&gt;.rdp&lt;/code&gt; files without distributing the certificate&lt;/li&gt;
	&lt;li&gt;Deploying the policy via Group Policy or PowerShell&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;p&gt;If you push Remote Desktop shortcuts out to users, you probably already know about the April 2026 Windows cumulative update (&lt;a href="https://support.microsoft.com/kb/5083769"&gt;KB5083769&lt;/a&gt; on Windows 11, KB5082200 on Windows 10). If you don't, you might have found out the hard way — via a Monday-morning deluge of "is this a virus?" tickets from users who suddenly have a big orange warning on the RDP file that worked fine last week.&lt;/p&gt;

&lt;p&gt;Signotaur 1.2.0.107 ships with &lt;code&gt;.rdp&lt;/code&gt; file signing support. Here's what changed in Windows, why it matters, and what the new signing command actually does.&lt;/p&gt;

&lt;h2&gt;What Microsoft changed&lt;/h2&gt;

&lt;p&gt;The April cumulative addresses &lt;a href="https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-26151"&gt;CVE-2026-26151&lt;/a&gt;. Two user-visible things came with it:&lt;/p&gt;

&lt;ol style="margin-left: 1.4em;  margin-bottom: 1em;"&gt;
	&lt;li&gt;The Remote Desktop Connection warning dialog was redesigned. It now lists every resource the connection can redirect (drives, printers, clipboard, USB, etc.) with individual checkboxes, and &lt;strong&gt;every box is off by default&lt;/strong&gt;. Users have to opt in to each one on every connection, every time.&lt;/li&gt;
	&lt;li&gt;The trust criteria for signed &lt;code&gt;.rdp&lt;/code&gt; files tightened. Pre-April, a file signed by an untrusted cert got a yellow "Verify the publisher" banner. Post-April, the same file gets an orange "Caution: Unknown remote connection" banner — visually indistinguishable from an unsigned file.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here's what the new per-launch dialog looks like. For an unsigned file:&lt;/p&gt;

&lt;p style="text-align: center;"&gt;&lt;img alt="The RDP security warning dialog for an unsigned file: an orange 'Caution: Unknown remote connection' banner, 'Unknown publisher', and per-redirection checkboxes all off by default." src="https://cdn.finalbuilder.com/blog/daves/signotaur-rdp/unsigned-rdp-security-warning-dialog.png" /&gt;&lt;/p&gt;

&lt;p&gt;And for a file signed by a publisher Windows can verify:&lt;/p&gt;

&lt;p style="text-align: center;"&gt;&lt;img alt="The RDP security warning dialog for a signed file: a yellow 'Verify the publisher of this remote connection' banner with the publisher name, and the same per-redirection checkboxes." src="https://cdn.finalbuilder.com/blog/daves/signotaur-rdp/signed-rdp-security-warning-dialog.png" /&gt;&lt;/p&gt;

&lt;p&gt;Separately, the first time any user opens an &lt;code&gt;.rdp&lt;/code&gt; file after installing the update, Windows shows a one-time educational dialog explaining what &lt;code&gt;.rdp&lt;/code&gt; files are and why they can be dangerous:&lt;/p&gt;

&lt;p style="text-align: center;"&gt;&lt;img alt="The first-launch educational dialog shown once per user account after installing KB5083769, explaining what RDP files are and the associated phishing risks." src="https://cdn.finalbuilder.com/blog/daves/signotaur-rdp/rdp-first-launch-dialog.png" /&gt;&lt;/p&gt;

&lt;p&gt;Once dismissed, it doesn't reappear for that account.&lt;/p&gt;

&lt;p&gt;Discussion and lament: &lt;a href="https://www.reddit.com/r/sysadmin/comments/1sm61eo/fyi_microsoft_rdp_changes_with_april_cumulative/"&gt;r/sysadmin: FYI: Microsoft RDP changes with April cumulative&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This is a genuinely good security change — the old dialog was vague and under-informed users about what was being shared with the remote host. It is also a rather annoying deployment change, because plenty of teams had &lt;code&gt;rdpsign.exe&lt;/code&gt;-signed files quietly working for years, and now they don't.&lt;/p&gt;

&lt;h2&gt;Why people got caught out&lt;/h2&gt;

&lt;p&gt;The usual story goes like this: a team signed their &lt;code&gt;.rdp&lt;/code&gt; file years ago with a self-signed or internal-CA certificate, shipped it to users, and it displayed a friendly yellow "Verify the publisher: Acme Corp" dialog that everyone clicked through. After April's update, the same file suddenly shows an orange "Unknown remote connection" dialog and support gets flooded. One representative example from the Reddit threads: &lt;a href="https://www.reddit.com/r/sysadmin/comments/1sp6h4x/comment/ohaenxv/"&gt;a sysadmin describing exactly this&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The signatures on those files are still cryptographically valid. Windows is just stricter now about what counts as a "verified publisher" for RDP.&lt;/p&gt;

&lt;h2&gt;The actual recipe (no dialog at all)&lt;/h2&gt;

&lt;p&gt;Cutting through the noise, here's what recipient machines need for a signed &lt;code&gt;.rdp&lt;/code&gt; file to open with no warning dialog at all:&lt;/p&gt;

&lt;ol style="margin-left: 1.4em;  margin-bottom: 1em;"&gt;
	&lt;li&gt;The signing certificate's chain must terminate in a root the client machine trusts. Commercial code-signing certs (DigiCert, Sectigo, etc.) chain to roots Windows already trusts. For an internal CA or self-signed cert, the root has to be imported into &lt;code&gt;Cert:\*\Root&lt;/code&gt; on each client.&lt;/li&gt;
	&lt;li&gt;A Remote Desktop trust policy must be in place that whitelists your signing certificate's SHA-1 thumbprint. This lives at either &lt;code&gt;HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services&lt;/code&gt; (machine-wide, requires admin) or &lt;code&gt;HKCU\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services&lt;/code&gt; (per-user, no admin required), and needs two values:
	&lt;ul style="margin-bottom: 0.5em;"&gt;
		&lt;li&gt;&lt;code&gt;AllowSignedFiles&lt;/code&gt; — REG_DWORD, set to &lt;code&gt;1&lt;/code&gt;&lt;/li&gt;
		&lt;li&gt;&lt;code&gt;TrustedCertThumbprints&lt;/code&gt; — REG_SZ, the SHA-1 thumbprint of your signing cert, uppercase, no spaces (semicolon-separated if you have more than one)&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A word of warning about one trap we hit: &lt;code&gt;TrustedCertThumbprints&lt;/code&gt; is a whitelist on top of normal chain validation, not a replacement for it. Dropping a self-signed cert's thumbprint into the list without also importing the cert into a trusted root store does nothing. If you've tried this and wondered why it didn't work, that's why.&lt;/p&gt;

&lt;h2&gt;What Signotaur does when you sign a .rdp file&lt;/h2&gt;

&lt;p&gt;Unlike &lt;code&gt;rdpsign.exe&lt;/code&gt;, Signotaur signs &lt;code&gt;.rdp&lt;/code&gt; files against a remote server — the private key stays on the server (or an HSM it's connected to), so no admin workstation or automation host needs a local copy of the signing certificate. This is the main reason to use Signotaur for &lt;code&gt;.rdp&lt;/code&gt; signing rather than running &lt;code&gt;rdpsign.exe&lt;/code&gt; directly.&lt;/p&gt;

&lt;p&gt;The mechanics otherwise match what you'd expect. The client reads the &lt;code&gt;.rdp&lt;/code&gt; file, canonicalises the contents, sends only the digest to the server for signing, and writes the signed file back in place. The output is byte-equivalent to &lt;code&gt;rdpsign.exe&lt;/code&gt;'s — same canonical form, same 12-byte Microsoft wrapper, same detached CMS structure — so recipients see the same Windows Remote Desktop Connection dialog regardless of which tool produced the signature.&lt;/p&gt;
        &lt;p&gt;RFC 3161 timestamping is supported, and the timestamp is embedded into the CMS in the standard way. But there's a caveat that's easy to miss: &lt;code&gt;mstsc.exe&lt;/code&gt; doesn't actually consult the timestamp when validating a &lt;code&gt;.rdp&lt;/code&gt; signature — it only checks whether the signing certificate is currently valid at the moment the file is opened. The strongest indirect evidence for this is that Microsoft's own &lt;code&gt;rdpsign.exe&lt;/code&gt; has no timestamping support at all — no &lt;code&gt;/tr&lt;/code&gt; flag, no timestamp in its output.&lt;/p&gt;
        &lt;p&gt;The timestamp is still worth having: it's standards-compliant CMS so general-purpose tools can read the signing time, it provides a tamper-evident audit trail, and it future-proofs against any future change in &lt;code&gt;mstsc&lt;/code&gt;'s behaviour. In practice though, plan to re-sign distributed &lt;code&gt;.rdp&lt;/code&gt; files when your signing certificate is renewed, the same way you would for an unsigned-but-distributed file.&lt;/p&gt;

&lt;p&gt;Because the registry recipe above is easy to get wrong, Signotaur also prints the recipe for you after signing, pre-filled with the thumbprint of the certificate that just signed the file. It tells you whether the cert is self-signed (in which case you'll also need to deploy the cert itself to recipient trusted-root stores) or chained (in which case you may not).&lt;/p&gt;

&lt;p&gt;If you're running &lt;code&gt;sign&lt;/code&gt; interactively on Windows, it also offers to apply the policy to &lt;code&gt;HKCU&lt;/code&gt; for the current user on the spot — no admin rights needed, no registry editor, no PowerShell snippet to copy-paste. This is mostly useful for confirming the signing works locally before you deploy the policy via GPO. In unattended runs, the prompt is automatically skipped, and you can pass &lt;code&gt;--no-mstsc-guidance&lt;/code&gt; (&lt;code&gt;--nmg&lt;/code&gt;) to suppress the whole lot if the log gets noisy.&lt;/p&gt;

&lt;h2&gt;An example&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;sign&lt;/code&gt; command detects &lt;code&gt;.rdp&lt;/code&gt; files automatically based on extension, so there's nothing special to type:&lt;/p&gt;

&lt;div&gt;
&lt;div class="syntaxhighlighter  bash" id="highlighter_rdpsign"&gt;
&lt;table border="0" cellpadding="0" cellspacing="0"&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td class="gutter"&gt;
			&lt;div class="line number1 index0 alt2"&gt;&gt;&lt;/div&gt;
			&lt;/td&gt;
			&lt;td class="code"&gt;
			&lt;div class="container"&gt;
			&lt;div class="line number1 index0 alt2"&gt;&lt;code class="bash plain"&gt;SignotaurTool.exe sign -a &lt;apikey&gt; -s &lt;signserver&gt; -t &lt;thumbprint&gt; --tr http://timestamp.digicert.com --td SHA256 connect-to-prod.rdp&lt;/thumbprint&gt;&lt;/signserver&gt;&lt;/apikey&gt;&lt;/code&gt;&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;After a successful sign you'll see something along the lines of:&lt;/p&gt;

&lt;pre style="margin-bottom: 1em;"&gt;
&lt;code&gt;RDP signing guidance (Windows Remote Desktop Connection compatibility, post-KB5083769):

By default recipients will see a "Verify the publisher" or "Unknown publisher"
warning dialog when opening this signed file in Windows Remote Desktop Connection.
To eliminate the warning, each recipient machine needs:

1. The signing certificate's chain trusted on the machine.
   For commercial certificates chaining to a Windows-preinstalled root, no action
   is required; internal-CA certificates require the CA to be imported into each
   recipient's Trusted Root store.

2. The signing certificate's thumbprint added to the Remote Desktop trust-publisher
   policy:

   Value: AllowSignedFiles (REG_DWORD) = 1
   Value: TrustedCertThumbprints (REG_SZ) = &lt;your_cert_thumbprint&gt;

Apply AllowSignedFiles + TrustedCertThumbprints to your current user registry now?
Useful for testing this signed .rdp locally. [y/N]:&lt;/your_cert_thumbprint&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Answer &lt;code&gt;y&lt;/code&gt; and it writes the values to your &lt;code&gt;HKCU&lt;/code&gt; — open the file in Remote Desktop Connection, confirm there's no dialog, and you know the signing bit is working before you take the policy near a GPO.&lt;/p&gt;

&lt;h2&gt;Deploying the policy to the fleet&lt;/h2&gt;

&lt;p&gt;For anything beyond a couple of machines, Group Policy is the right tool — it's also how you set these same values without touching the registry by hand. In the Group Policy Management Editor:&lt;/p&gt;

&lt;ul style="margin-bottom: 1em;"&gt;
	&lt;li&gt;Computer (or User) Configuration → Administrative Templates → Windows Components → Remote Desktop Services → Remote Desktop Connection Client&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Allow .rdp files from valid publishers and user's default .rdp settings&lt;/em&gt; → Enabled&lt;/li&gt;
	&lt;li&gt;&lt;em&gt;Specify SHA1 thumbprints of certificates representing trusted .rdp publishers&lt;/em&gt; → Enabled, with your thumbprints in the list (uppercase, semicolon-separated if multiple)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Intune has equivalent settings under the Administrative Templates profile. If you're deploying to a smaller set of machines, or scripting it, a PowerShell snippet that does the per-user version (no admin needed) looks like this:&lt;/p&gt;

&lt;div&gt;
&lt;div class="syntaxhighlighter  powershell" id="highlighter_psrecipe"&gt;
&lt;table border="0" cellpadding="0" cellspacing="0"&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td class="gutter"&gt;
			&lt;div class="line number1 index0 alt2"&gt;1&lt;/div&gt;

			&lt;div class="line number2 index1 alt1"&gt;2&lt;/div&gt;

			&lt;div class="line number3 index2 alt2"&gt;3&lt;/div&gt;

			&lt;div class="line number4 index3 alt1"&gt;4&lt;/div&gt;
			&lt;/td&gt;
			&lt;td class="code"&gt;
			&lt;div class="container"&gt;
			&lt;div class="line number1 index0 alt2"&gt;&lt;code class="powershell plain"&gt;$p = 'HKCU:\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services'&lt;/code&gt;&lt;/div&gt;

			&lt;div class="line number2 index1 alt1"&gt;&lt;code class="powershell plain"&gt;New-Item -Path $p -Force | Out-Null&lt;/code&gt;&lt;/div&gt;

			&lt;div class="line number3 index2 alt2"&gt;&lt;code class="powershell plain"&gt;Set-ItemProperty -Path $p -Name AllowSignedFiles -Value 1 -Type DWord&lt;/code&gt;&lt;/div&gt;

			&lt;div class="line number4 index3 alt1"&gt;&lt;code class="powershell plain"&gt;Set-ItemProperty -Path $p -Name TrustedCertThumbprints -Value 'YOUR_THUMBPRINT_UPPERCASE' -Type String&lt;/code&gt;&lt;/div&gt;
			&lt;/div&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Swap &lt;code&gt;HKCU&lt;/code&gt; for &lt;code&gt;HKLM&lt;/code&gt; for the machine-wide version (and run elevated). The thumbprint must be uppercase with no spaces; use a semicolon to join multiple thumbprints if you have more than one signing cert in rotation.&lt;/p&gt;

&lt;h2&gt;What you still can't do&lt;/h2&gt;

&lt;p&gt;A few things worth knowing up front so you don't hunt for them:&lt;/p&gt;

&lt;ul style="margin-bottom: 1em;"&gt;
	&lt;li&gt;The per-redirection checkboxes in the new dialog are not controlled by &lt;code&gt;AllowSignedFiles&lt;/code&gt;. Even with a properly trusted and whitelisted signature, users still see the redirection dialog on first use. There's a separate set of policies for which redirections are allowed on the server side; the client-side checkboxes are a user-consent UI rather than a trust decision.&lt;/li&gt;
	&lt;li&gt;There's a temporary "revert to pre-April dialog" switch at &lt;code&gt;HKLM\Software\Policies\Microsoft\Windows NT\Terminal Services\Client\RedirectionWarningDialogVersion = 1&lt;/code&gt;. Don't rely on it — Microsoft has been explicit that it will be removed in a future update.&lt;/li&gt;
	&lt;li&gt;Windows has no built-in &lt;code&gt;.rdp&lt;/code&gt; signature verifier. &lt;code&gt;rdpsign.exe /v&lt;/code&gt; is "verbose", not "verify"; in practice the only verifier is Remote Desktop Connection opening the file. Signotaur's &lt;code&gt;verify&lt;/code&gt; command will validate the signature and cert chain offline if you want a CI-friendly check.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;If you'd rather not think about any of this&lt;/h2&gt;

&lt;p&gt;The short version: get a code-signing certificate from a public CA that chains to a Windows-preinstalled root, register it with your Signotaur server, sign your &lt;code&gt;.rdp&lt;/code&gt; files as part of your distribution workflow, and push the &lt;code&gt;AllowSignedFiles&lt;/code&gt; + &lt;code&gt;TrustedCertThumbprints&lt;/code&gt; policy out via GPO. After that, signed &lt;code&gt;.rdp&lt;/code&gt; files open with no dialog, and the next time Microsoft tightens the rules you've already done the trust-deployment work.&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;For command-line details and the full signing command reference see the &lt;a href="https://docs.finalbuilder.com/sn/1.0/"&gt;Signotaur documentation&lt;/a&gt;. If you run into something specific — especially if you have an internal CA or a less-common PKCS#11 token in play — our support team is happy to help.&lt;/p&gt;
</description><guid isPermaLink="false">882</guid></item><item><title>FinalBuilder 8.5 and Automise 5.5 Release</title><link>https://www.finalbuilder.com/resources/blogs/postid/871/finalbuilder-85-and-automise-55-release</link><category>Automise,Delphi,FinalBuilderGeneral,Visual Studio,Windows</category><pubDate>Wed, 09 Apr 2025 01:50:56 GMT</pubDate><description>&lt;p&gt;It's no secret that we are always working on the next version of FinalBuilder and Automise - that's the nature of software development. That said, the next major versions are taking much longer than we would like - the reason for this is dealing with serious technical debt (active scripting).&lt;/p&gt;

&lt;p&gt;With this extended development cycle, there are changes that we finished some time ago that we decided just could not wait for the next major version. We backported those changes to the FinalBuilder 8.x and Automise 5.x - but since some of these changes break project compatibility (with the x.0 releases) we are releasing FinalBuilder 8.5 and Automise 5.5&lt;/p&gt;

&lt;h2&gt;Encryption Algorithm&lt;/h2&gt;

&lt;p&gt;FinalBuilder &amp; Automise have always used the &lt;a href="https://en.wikipedia.org/wiki/Blowfish_(cipher)" target="_blank"&gt;Blowfish&lt;/a&gt; algorithm (with a 160 bit key) for encrypting passwords, apikeys etc.&lt;/p&gt;

&lt;p&gt;FinalBuilder 8.5/Automise 5.5 adds the &lt;a href="https://en.wikipedia.org/wiki/Advanced_Encryption_Standard" target="_blank"&gt;AES 256 Algorithm&lt;/a&gt; (with a 256 bit key) as an option.&lt;/p&gt;

&lt;p&gt;There is a new IDE option to specify the default project encryption for new projects - this defaults to AES256. Note this only affects New projects. To change the algorithm used for existing projects, open the project info window from the Project Menu, change the setting and click ok and then save the project.&lt;/p&gt;

&lt;p&gt;Note that these options will be removed in FinalBuilder 9/Automise 6, when AES 256 will become the default (and projects still using Blowfish will be upgraded automatically).&lt;/p&gt;

&lt;p&gt;It's should be noted that Blowfish is still considered reasonably secure, this change is to enabled the continued use of FinalBuilder in organisations must comply with NIST (US) or ASD (Australia) requirements.&lt;/p&gt;

&lt;h2&gt;Password Variables&lt;/h2&gt;

&lt;p&gt;In FinalBuilder &amp; Automise we have always attempted to mask passwords from the logs, but occasionally that can slip through.&lt;/p&gt;

&lt;p&gt;Any passwords stored in variables were visible in plain text in project project files. For this reason, we have added a new Password variable type. These variables will be encrypted in project files. The backing type is string.&lt;/p&gt;

&lt;h2&gt;Password UI&lt;/h2&gt;

&lt;p&gt;All password fields on all now utilise a new password edit control that allows peeking at the value (like the windows 11 password box).&lt;/p&gt;

&lt;h2&gt;Windows Credential Manager Actions&lt;/h2&gt;

&lt;p&gt;The Windows Credential Manager actions enable you to read/write/delete credentials stored in the credential manager.&lt;/p&gt;

&lt;h2&gt;Project file compatibility Warning&lt;/h2&gt;

&lt;p&gt;FinalBuilder 8.5 project files are NOT downward compatible with FinalBuilder 8.0 - or put another way, FinalBuilder 8.0 cannot load FinalBuilder 8.5 projects. The same applies to Automise 5.5 projects. This is due to some of the changes outlined above.&lt;/p&gt;
</description><guid isPermaLink="false">871</guid></item><item><title>FinalBuilder 8.0.0.3378 and Automise 5.0.0.1593 breaking changes.</title><link>https://www.finalbuilder.com/resources/blogs/postid/847/finalbuilder-8003378-and-automise-5001593-breaking-changes</link><category>Automise,Delphi,FinalBuilder,Windows</category><pubDate>Tue, 16 Jul 2024 05:30:16 GMT</pubDate><description>&lt;p&gt;Throughout the lifespan of FinalBuilder and Automise, we have worked very hard to avoid breaking changes - however sometimes they are unavoidable.&lt;/p&gt;

&lt;p&gt;Today's updates to FinalBuilder 8 and Automise 5 have a breaking change in the SSH Batch Execute action. Previously, this action would manage it's own connect/disconnect - the breaking change is this action now requires separate SSH Connect/Disconnect actions. &lt;/p&gt;

&lt;p&gt;The reason for this is complicated, but it was brought about by us changing the client library we use for the SSH actions. The previous client library had too many issues that we were unable to work around. The most annoying example - the actions would not work correctly/reliably with openssh running on windows servers. We did try to fix this issue, but in the end the only viable option was to replace the library (something we were planning to do in the future anyway).  The new library (Rebex) is much more stable and performant. We plan to re-implement the SFTP actions (which have issues with some servers) with this library in a future update.&lt;/p&gt;

&lt;p&gt;We have been using a build with these changes in production for some time now to dogfood these changes. &lt;/p&gt;

&lt;p&gt;To use the  SSH Batch Execute action, add an SSH Connect action before it and an SSH Disconnect after, set the connection name on the SSH Batch Execute and SSH Disconnect to the name of the new SSH Connect action's connection name and you should be all set.&lt;/p&gt;

&lt;p&gt;If you experience any issues with the SSH actions in these new updates let us know (with as much info as you can about the server and action settings). &lt;/p&gt;
</description><guid isPermaLink="false">847</guid></item><item><title>Managing Delphi Version Info with FinalBuilder</title><link>https://www.finalbuilder.com/resources/blogs/postid/836/managing-delphi-version-info-with-finalbuilder</link><category>Delphi,FinalBuilder,Windows</category><pubDate>Wed, 26 Jun 2019 15:49:26 GMT</pubDate><description>&lt;p&gt;In this post, we'll take a look at the various options for managing and updating Version Info in Delphi projects using FinalBuilder.&lt;/p&gt;

&lt;h2&gt;Windows Version Info Primer&lt;/h2&gt;

&lt;p&gt;Windows Version Info (ie the version info shown in explorer) is stored in a &lt;a href="https://docs.microsoft.com/en-us/windows/desktop/menurc/versioninfo-resource" target="_blank"&gt;VERSIONINFO&lt;/a&gt; resource inside the executable (exe or dll). These resources are created by defining a .rc file, and compiling with either the windows resource compiler (rc.exe) or Delphi's provided resource compiler (brcc32 or cgrc depending on the delphi version). This results in a .res file, which can be linked into exe at compile time by referencing it in the source code, e.g :&lt;/p&gt;

&lt;pre class="brush:delphi; toolbar:false;"&gt;
{$R 'myresource.res'}&lt;/pre&gt;

&lt;p&gt;I highly recommend familiarising yourself with the VERSIONINFO resource type and it's parts.&lt;/p&gt;

&lt;h2&gt;Delphi IDE Support for Version Info&lt;/h2&gt;

&lt;p&gt;The Delphi IDE creates a [YourProjectName].res file next to the dpr or dpk when you create a new project. This is where the IDE will place the VERSIONINFO resource when you enable the option to "Include version information in project".  When you compile the project in the IDE, if needed the IDE will regenerate this res file with updated version info before it is linked into the executable.  For exe's, this resource file also includes the MAINICON resource (the icon shown in explorer).&lt;/p&gt;

&lt;p&gt;You do not have to use this feature, you can leave the option turned off and manage the version info yourself, by creating your own resource script (.rc) with a VERSIONINFO structure,  and compiling it and referencing the resulting .res file in your source code. You can even just reference the .rc file&lt;/p&gt;

&lt;pre class="brush:delphi; toolbar:false;"&gt;
{$R 'myresource.res' 'myresource.rc'}&lt;/pre&gt;

&lt;p&gt;and the IDE will compile the rc file and link in the resulting res file. The caveat to this technique is that the command line compiler (dcc32, dcc64 etc) does not support this. &lt;/p&gt;

&lt;p&gt;If your binary doesn't have version info, or has incorrect version info, it's typically because :&lt;/p&gt;

&lt;p&gt;1) The version info  resource wasn't referenced in the source and wasn't linked in&lt;br /&gt;
2) There are duplicate VERSIONINFO resources linked, windows will pick the first one it finds.&lt;br /&gt;
3) You set the version info on the wrong IDE configuration (more on this below). &lt;/p&gt;

&lt;p&gt;The Delphi IDE, along with the dproj file (which is an msbuild project file), uses a convoluted configuration inheritance mechanism to set project properties, including version info. Many a developer has been caught out by this scheme, setting the version info at the wrong node in the heirachy, resulting in no version info in their executables. There have also been issues with dproj files that have been upgraded through multiple versions of delphi over the years.&lt;/p&gt;

&lt;h2&gt;Using FinalBuilder&lt;/h2&gt;

&lt;p&gt;In the development environment, the version info usually doesn't matter too much, but for formal releases it's critical, so it's best to leave setting/updating your version info  to your &lt;a href="/finalbuilder" target="_blank"&gt;automated build tool&lt;/a&gt; or your &lt;a href="/continua-ci" target="_blank"&gt;continuous integration server&lt;/a&gt;. In FinalBuilder we have invested a lot of time and energy to making version info work correctly with all the different versions of delphi, dealing with the vagaries and subtle differences with each version (and there are many!).&lt;/p&gt;

&lt;p style="text-align: center;"&gt;&lt;img src="https://cdn.finalbuilder.com/blog/vincent/fbversioninfo/delphi-versioninfo-tab.png" /&gt;&lt;/p&gt;

&lt;p&gt;On the Delphi action in FinalBuilder, the Version Info tab presents the version info in a similar way to old versions of delphi IDE did (a much nice ui that the current version imho). This ui allows you control all the various version info properties (and there are a lot!). Note that these will only take effect if you have the "Regenerate resource" option checked on the Project tab (ie, regenerate yourproject.res). &lt;/p&gt;

&lt;p style="text-align: center;"&gt;&lt;img src="https://cdn.finalbuilder.com/blog/vincent/fbversioninfo/delphi-project-tab.png" /&gt;&lt;/p&gt;

&lt;p&gt;Note that the Major, Minor, Release and Build fields are number spin edits, and cannot take FinalBuilder variables. That can easily be worked around with some simple scripting, in the BeforeAction script event  (javascript):&lt;/p&gt;

&lt;p style="text-align: center;"&gt;&lt;img src="https://cdn.finalbuilder.com/blog/vincent/fbversioninfo/delphi-action-script.png" /&gt;&lt;/p&gt;

&lt;p&gt;Another option is to use &lt;a href="https://wiki.finalbuilder.com/display/FB8/Property+Sets" target="_blank"&gt;Property Sets&lt;/a&gt; to provide the source of the Version Info. Property sets are especially useful when you have multiple actions that need the same version info, or at least to share the same version numbers. Creating a Property Set is trivial, just drop a PropertySet Define action on your target, before the Delphi Action. In the PropertySet Define action, select Win32 Version Info to manage all version info properties, or Win32 Version Numbers to have the property set just manage the major, minor, release and build numbers.&lt;/p&gt;

&lt;p style="text-align: center;"&gt;&lt;img src="https://cdn.finalbuilder.com/blog/vincent/fbversioninfo/define-propertyset.png" /&gt;&lt;/p&gt;

&lt;p&gt;To set the property set values, add a PropertySet Assign Values action before the Delphi action.&lt;/p&gt;

&lt;p style="text-align: center;"&gt;&lt;img src="https://cdn.finalbuilder.com/blog/vincent/fbversioninfo/propset-assign.png" /&gt;&lt;/p&gt;

&lt;p&gt;Then in the Delphi action it's a simple task to select the property set in the version info tab&lt;/p&gt;

&lt;p style="text-align: center;"&gt;&lt;img src="https://cdn.finalbuilder.com/blog/vincent/fbversioninfo/delphi-use-propset.png" /&gt;&lt;/p&gt;

&lt;p&gt;Notice that the version number fields are disabled, since they are now provided by the property set. If you choose the Win32 Version Info property set type, more fields are disabled.&lt;/p&gt;

&lt;p&gt;One last thing I should mention, is that along with the Version Info and the MAINICON, the project.res file also typically (well for windows at least) contains the manifest file. I recommend you look at the Resource Compiler tab, where it lets you choose which resource compiler to use (more useful in older versions of delphi, where brcc32 didn't cope with some hicolor icon types) and specify the manifest file. I discussed &lt;a href="/resources/blogs/windows-manifest-files" target="_blank"&gt;windows manifest files a few years ago in this blog post&lt;/a&gt;.&lt;/p&gt;
</description><guid isPermaLink="false">836</guid></item><item><title>Introducing Continua CI Version 1.9</title><link>https://www.finalbuilder.com/resources/blogs/postid/782/introducing-continua-ci-version-19</link><category>.NET,Continua CI,Delphi,General,Web Development,Windows</category><pubDate>Tue, 14 Aug 2018 13:47:08 GMT</pubDate><description>&lt;p&gt;&lt;img alt="" src="https://cdn.finalbuilder.com/blog/dave/continuaciwizardimagesmall.png" style="border-width: 0px; border-style: solid; margin-right: 5px; margin-left: 5px; width: 55px; height: 55px;" /&gt;&lt;/p&gt;

&lt;p&gt;Version 1.9 is now out of beta and available as a stable release. Thank you to those of you who have already tried out the beta - especially those who reported issues.&lt;/p&gt;

&lt;p&gt;This version brings major changes to the notifications system. We redesigned it using a common architecture, that makes it much easier to add new notification publisher types. Where previously, only email, XMPP and private message notifications were available, there are now publishers for Slack, Teams, Hipchat and Stride. And we can now add more (let us know what you need).&lt;/p&gt;

&lt;p&gt;&lt;img alt="" src="https://cdn.finalbuilder.com/blog/dave/publishertypes.png" style="width: 626px; height: 399px; display: block;  margin-left: auto;  margin-right: auto; " /&gt;&lt;/p&gt;

&lt;p&gt;We are no longer limited to one publisher of each type. You may, for example, have different email servers for different teams on your company. You can set up two email publishers, one for each server, and set up subscriptions so that notifications from different projects go to different email servers. Likewise for different Slack workspaces, Teams channel connectors and so on.&lt;/p&gt;

&lt;p&gt;We have also improved the XMPP publisher to support sending notifications to rooms. Subscriptions have been improved, allowing you to specify a room and/or channel for this and other publishers.&lt;/p&gt;

&lt;p&gt;&lt;img alt="" src="https://cdn.finalbuilder.com/blog/dave/subscription.png" style="display: block; margin-left: auto; margin-right: auto; width: 625px; height: 733px;" /&gt;&lt;/p&gt;

&lt;p&gt;User preferences have been updated allowing each user to specify a recipient id, username or channel per publisher.&lt;/p&gt;

&lt;p&gt;&lt;img alt="" src="https://cdn.finalbuilder.com/blog/dave/userpreferences.png" style="width: 726px; height: 751px; display: block;  margin-left: auto;  margin-right: auto; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);" /&gt;&lt;/p&gt;

&lt;p&gt;You can see some metrics on the throughput of each publisher (number of messages on queue, messages sent per second, average send time, etc.) on the Publishers page in the Administration area. This also shows real-time counts of any errors occurring while sending messages and also any messages waiting on a retry queue due to rate limiting or service outages. This allows you to know when you need to upgrade rate limits or make other service changes.&lt;/p&gt;

&lt;p&gt;&lt;img alt="" src="https://cdn.finalbuilder.com/blog/dave/publishermetrics.png" style="width: 990px; height: 306px; display: block;  margin-left: auto;  margin-right: auto; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);" /&gt;&lt;/p&gt;

&lt;p&gt;The Templates page has been updated. Templates are now divided into a tab per publisher. The list of available variables for each event type has been moved to a expandable side panel.&lt;/p&gt;

&lt;p&gt;&lt;img alt="" src="https://cdn.finalbuilder.com/blog/dave/notificationtemplates.png" style="width: 564px; height: 707px; display: block;  margin-left: auto;  margin-right: auto; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);" /&gt;&lt;/p&gt;

&lt;p&gt;This release is built on .Net Framework version 4.7.2, which has allowed us to upgrade a number of third party libraries, including the database ORM and PostgreSQL drivers. This has noticeably improved performance, as well as providing us with a richer platform to build future features on. The setup wizard will prompt for you to install .Net Framework version 4.7.2, before continuing with the installation.&lt;/p&gt;

&lt;p&gt;&lt;img alt="" src="https://cdn.finalbuilder.com/blog/dave/installerframeworkrequirement.png" style="width: 503px; height: 391px; display: block;  margin-left: auto;  margin-right: auto;" /&gt;&lt;/p&gt;

&lt;p&gt;Note that applications running on .Net 4.7.2 do not run on versions of Windows prior to Windows Server 2008R2 and Windows 7 SP1. We are also dropping the 32-bit server installer. This is mainly to reduce testing overheads. We will still be releasing 32-bit agents for those who are using 16-bit compilers.&lt;/p&gt;

&lt;p&gt;We will continue to provide bug fixes to Continua CI version 1.8.1 for while to give you time to migrate from older platforms.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt; &lt;/p&gt;
</description><guid isPermaLink="false">782</guid></item><item><title>Continua CI and TLS 1.2</title><link>https://www.finalbuilder.com/resources/blogs/postid/761/continua-ci-and-tls-12</link><category>.NET,Continua CI,Delphi,Windows</category><pubDate>Fri, 23 Feb 2018 09:24:09 GMT</pubDate><description>&lt;p&gt;SSL standards are changing, and older SSL/TSL protocols are slowly being deprecated, or even turned off by some services. This post shows how to enable TLS 1.2 support in Continua CI.&lt;/p&gt;
&lt;p&gt;Yesterday, we started getting reports that the Github Status event handler, and the Github Status action in Continua CI had stopped working.&lt;/p&gt;
&lt;p&gt;Sure enough, in our testing here we were able to confirm the case. While testing this under the debugger, the error we were seeing was rather strange : "The request was aborted: Could not create SSL/TLS secure channel.". &lt;/p&gt;
&lt;p&gt;After some research, we found this error was due to being unable to negotiate a common protocol between the client and the server.&lt;/p&gt;
&lt;p&gt;Now Continua CI 1.x is built with .NET 4.0 (v2 will be on 4.7.1) - we know that .NET 4.0 doesn't support TLS 1.2, and a quick check of the github api server using &lt;a href="https://www.ssllabs.com/ssltest/" target="_blank"&gt;SSLLabs&lt;/a&gt; shows that they now
only support TLS 1.2.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;
&lt;img alt="" src="/blogimages/vincent/continua-tls/github-ssllabs.png" width="987" height="279" /&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt; I wondered if this was announced by github - turns out they did announce this 3 weeks ago :&lt;/p&gt;
&lt;p&gt;
&lt;a href="https://github.com/blog/2498-weak-cryptographic-standards-removal-notice" target="_blank"&gt;Weak cryptographic standards removal notice&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;and yesterday they permanently disabled TLS 1.0 and 1.1&lt;/p&gt;
&lt;p&gt;
&lt;a href="https://github.com/blog/2507-weak-cryptographic-standards-removed" target="_blank"&gt;Weak cryptographic standards removed&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Anyway, back to Continua CI. The good news is that there is a way to enable TLS 1.2 support in Continua CI. Note that this only works when running on Windows Server 2008 or later (Server 2003 does not support TLS 1.2 at all, and we will be dropping support
for it with v2).&lt;/p&gt;
&lt;p&gt;1) Install .Net Framework 4.5 or later - since all 4.x frameworks effectively replace 4.0 - 4.5 has support for TLS 1.2&lt;/p&gt;
&lt;p&gt;2) Edit %ProgramFiles%\VSoft Technologies\ContinuaCI\Server\Continua.Server.Service.exe.config on the server and %ProgramFiles%\VSoft Technologies\ContinuaCI Agent\Continua.Agent.Service.exe.config on each agent - add the following line in &lt;strong&gt;appSettings&lt;/strong&gt;    section :&lt;/p&gt;
&lt;pre class="brush:xml; toolbar:false;"&gt;       &amp;lt;add key="Continua.Service.SecurityProtocolType" value="Tls|Tls11|Tls12" /&amp;gt;
    &lt;/pre&gt;
Note that the key supports the following values: Ssl2|Ssl3|Tls|Tls11|Tls12|Default&lt;br /&gt;
&lt;p&gt; Default = Ssl3|Tls&lt;br /&gt;
Multiple protocols can be separated with |&lt;br /&gt;
The value "Tls|Tls11|Tls12" will allow Continua CI to work with services that do not support or have not enabled TLS 1.2, and with services that only support TLS 1.2 .&lt;/p&gt;
&lt;p&gt;3) Open Regedit and add the following value to : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 : SchUseStrongCrypto type DWORD value 1&lt;/p&gt;
&lt;p&gt;4) Restart the Server and Agent Services.&lt;/p&gt;
&lt;p&gt;5) You may need to restart your server(s) for the registry change to take effect.&lt;/p&gt;
&lt;p&gt;One last note : This change also effects the communication between the Continua CI Server and agents, if you make the change on the server, make sure you make a compatible change on the agents.&lt;/p&gt;</description><guid isPermaLink="false">761</guid></item><item><title>Windows 10 Fall Creators Update</title><link>https://www.finalbuilder.com/resources/blogs/postid/756/windows-10-fall-creators-update</link><category>Automise,Delphi,FinalBuilder,Windows</category><pubDate>Tue, 17 Oct 2017 09:55:38 GMT</pubDate><description>The &lt;a href="https://blogs.windows.com/windowsexperience/2017/10/17/get-windows-10-fall-creators-update" title="How do I get the Fall Update?"&gt;Windows 10 Fall Creators Update has only been out a few hours&lt;/a&gt;, but we're already getting questions about it.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
In our limited testing, FinalBuilder 8 and Automise 5 run fine.&lt;br /&gt;
&lt;br /&gt;
I've only been running the Fall Update for a few hours, but so far I have not noticed any issues. The applications I use daily all run fine.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
The "Windows 10 Creators Update" (ie the one before the Fall Update - stupid release naming imho) &lt;a href="https://quality.embarcadero.com/browse/RSP-17972" title="Embarcadero issue tracker. Requires registration/login to view."&gt;broke the Delphi debugger&lt;/a&gt; when using runtime packages. Aparently the issue was caused by a library loader optiimisation, not taking into account that dll's can have multiple import tables. I never did see a full explaination or acknowledgement of the problem from Microsoft. &lt;br /&gt;
&lt;br /&gt;
This only affected the debugger (all native code debuggers, not just Delphi), which would load and unload each dll many times (based on the number of imports, for FinalBuilder's core package, it was in the hundreds). Sometimes the application would launch, only for the debugger to crash, sometimes it would just hang, sometimes the Delphi IDE would get out of memory errors.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
For me, this was a big issue, since FinalBuilder and Automise use runtime packages. This affected all versions of Delphi, even the latest 10.2 (Tokyo). Embarcadero did eventually ship an update to 10.2 that mostly resolved the problem (not an easy thing as it involved major linker changes), but that didn't help us as we're using an older version (for reasons I won't go into here!). &lt;br /&gt;
&lt;br /&gt;
So since April 2017, I've been really hamstrung when it comes to debugging. Fortunately we discovered the issue before the Creators Update was installed on our other Delphi development machines (and it's a been a constant battle with windows update nagging to install it ever since) so we were still able debug, just not on my dev machine. Frustrating to say the least.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
The good news is that the Fall Update (mostly) fixes the problem.&amp;nbsp; I still see some dlls/packages getting unloaded and reloaded again, but the application launches and I can debug.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
As far as windows functionality in the Fall Update goes, well the Task Manager has a new GPU section on the performance tab which is mildly interesting, but since I don't use a Pen, or wear a VR headset while working, I'm not noticing much to get excited about. Hopefully, it's just a lot of bug fixes and performance enhancements, minus the show stoppers!!&amp;nbsp;</description><guid isPermaLink="false">756</guid></item></channel></rss>