Skip to main content


Windows Server 2016 Nano - In Practice on AWS EC2

I have decided NOT to use Windows Server 2016 Nano at this time. The following explains what I got working, and where I got stuck.  

I wanted to run custom Windows services compiled with Delphi for win64, and have them serve dynamic web content through IIS using a custom ISAPI extension, as I do on Windows Server 2012 and 2016.

I wanted to work with standalone Nano servers, without being in a corporate domain or using Active Directory.  i.e. tcp/ip not "computername" hook-ups.

I used AWS EC2 to launch my Nano instances for testing purposes.  That saves the difficulty of making the VHD image etc.  It introduces other challenges however, because the starting point is determined by Amazon.  I thought IIS would be included by default but it is not.  

I already had some Windows Server 2012/2016 systems running on EC2 in Oregon. Those all have normal remote desktop access, with full GUI.  It is essential to launch the Nano instance in a network such that you have a "local" c…
Recent posts

Windows 10 Visual Elements incl Start Menu Tiles for Native Desktop EXEs compiled with Delphi

This is a summary of what is needed to make a native Windows desktop EXE (compiled with Delphi or any compiler other than Visual Studio) appear with scaled logos and icons throughout Windows, especially in the Start Menu and in File Explorer.

1. The ICO file.This factoid is based on the Main Icon Group in Delphi, bds.exe, which you can examine with XNResourceEditor or Resource Hacker.

Build an ICO file containing your program icon in all these sizes and color depths. Use that icon when you Project > Build by associating it with the project.  In Delphi: menu Project  > Options, Application.  Do this for at least the target platform combined with Release, e.g. Win32 Release and/or Win64 Release.  Load your icon.  Repeat for other targets as necessary.  Project > Build each one.

2. The visualelementsmanifest.xml fileMake a file named ____.visualelementsmanifest.xml file where the ____ is replaced with the name of your EXE.  So for MyGreatApp.exe it would be MyGreatApp.VisualElement…

Windows 10 upgrade success after error 0x80070070 - 0x2000C

This post documents one way to successfully get past error 0x80070070 - 0x2000C with the Windows 10 upgrade process.  Your mileage may vary.

First, the problem.  I used the Media Creation tool to make an ISO  and cleared enough disk space that the installation from ISO was willing to proceed.  I had started from a Windows 7 Pro system, and I used Virtual Clone Drive to mount the ISO.  I was also running this machine inside VirtualBox and had to uninstall the Guest Additions and change the machine type to Windows 10.  All that worked.  The problem was that after the Win10 upgrade was in process and in fact almost complete, it reverted itself with an error message: 

We couldn't install Windows 10
We've set your PC back to the way it ws right before you started installing Windows 10.

0x80070070 - 0x2000C
The installation failed in the SAFE_OS phase with an error during APPLY_IMAGE operation. 

After some research, I found two potentially valid reasons for the trouble.  1, possibly corru…

Using OpenSSL on Windows to Sign a File Upload Policy for AWS S3

DocsThe authoritative reference for uploading files directly from a web browser to an Amazon S3 bucket is here on Amazon and a nice example with further tips is here, since 2008.  

This post concerns the steps 1-2-3-4 for signing the policy, and doing it with OpenSSL.exe at a Windows cmd prompt.

1. Encode the policy by using UTF-8.  
If you are lucky enough to be able to express your policy in English, then you can use notepad to save your JSON code to a simple Ansi file.  Nothing further required.

Match your utf8 filename to the one you specify in the BAT for step 2 below (inputfilespec).

2. Encode those UTF-8 bytes by using Base64.
A sample BAT file for doing this follows. Please adjust paths and filenames to something reasonable on your own system.  All filenames are arbitrary except that you need to make sure that the output from step 2 ends up as the input to step 3 below. 


set  inputfilespec=showcase-upload.policy.utf8.json
set outputfilespec=showcase-viaopenssl.base64.txt

:: cha…

How to Set Up and Serve Private Content using Amazon S3 and CloudFront

Here are my notes regarding an excellent post by Mark S. Rasmussen about Serving Private Content using Amazon S3 and CloudFront.  He uses Dot Net and C# for the steps.  By now, the browser-based AWS console has sufficient features to let us do this without compiling anything in C#.  These notes follow his sequence and tell you how to do each step without C#.

"Why you don’t want to rely on third party GUIs"I agree with Rasmussen that none of this will make much sense unless you have already learned a great deal about AWS, S3, CloudFront and SHA1 signing.  He is right; using the AWS command line tools or the AWS API is the ultimate way to mastery.  

Beginners, do not cross this line, sorry.

Creating the private bucketDo NOT use a period ('.') in your bucket name if you (ever) want to use the AWS feature for accelerated upload.  And you really should enable the acceleration feature.  This can be done inside the aws browser-based console, after the bucket exists.  Transfer …