$theTitle=wp_title(" - ", false); if($theTitle != "") { ?>
About Virtualization, VDI, SBC, Application Compatibility and anything else I feel like
If this is your first visit, take your time and look around. Here are some things you might be looking for:
Do you like my work? Did my work help you?
Thank you!
It’s been a little while since I had a “nice” application problem to blog about. It’s weird but I actually enjoy looking into those issues, well probably means I’m weird which is probably right.
I use a Virtual Desktop as my primary work desktop since my day 1 at work (and all the day 1’s after).
I like it because of the flexibility it gives me to work on any device and I also feel it’s that “drinking your own Champagne” is the very best way to really see if something is good!
Today I needed to write some notes and I wanted to use Quip for that but I’ve been having intermittent issues with the Quip Desktop app. I would launch and simple show a white screen with a stalled busy indicator.
Like most persons do, I ignored it and continued in the browser version for a while but as I don’t really like to have applications in a browser (hidden between 104 other tabs) I decided I would no longer “take” this and dived into it.
Read the rest of this entry »
Sometimes it can be useful to determine what registry key belongs to a registry key handle. And exampling is when hooking RegQueryValue so you can determine the registry key that a value belongs to instead of having to track the registry key when it’s opened.
To obtain the registry key we can pass a handle to the NtQueryKey
API with which has the following signature:
1 2 3 4 5 6 7 | NTSYSAPI NTSTATUS NtQueryKey( [in] HANDLE KeyHandle, [in] KEY_INFORMATION_CLASS KeyInformationClass, [out, optional] PVOID KeyInformation, [in] ULONG Length, [out] PULONG ResultLength ); |
1 2 | [DllImport("ntdll.dll", EntryPoint="NtQueryKey", SetLastError=false)] private static extern UInt32 NtQueryKey(IntPtr KeyHandle, KEY_INFORMATION_CLASS KeyInformationClass, IntPtr KeyInformation, UInt32 Length, ref UInt32 ResultLength); |
To get the keyname we need to pass the KeyNameInformation
enum and we can set the ReturnLength
parameter to 0 to obtain the required buffer size:
1 2 3 4 | UInt32 nts; UInt32 resLen = 0; IntPtr buffer = IntPtr.Zero; nts = NtQueryKey(KeyHandle, KEY_INFORMATION_CLASS.KeyNameInformation, IntPtr.Zero, 0, ref resLen); |
17 Oct // php the_time('Y') ?>
Sometimes I want to download a video from a website for offline usage, for example when I want to watch it whilst travelling.
Most video websites don’t want you do download videos as they of course want to show their ads and receive the clicks. I am not discussing the legal side here, up to you to check if it’s legally allowed to download the video you’re interested.
A very common way to make direct downloading of a video more difficult is to cut a video in many small video files (.ts files). Here’s an example screenshot of the Chrome developer view whilst playing a video from a popular Dutch website called Dumpert, filtering on .ts:
You can of course manually download al the .ts files and re-encode them to a single video file but it would be a lot of work.
The most common way to do this automatically is to use a browser extension or a separate application but in many cases they are either ridden with ads or malware.
So let’s see if we can do this ourselves.
We will need the following tools:
Just the 2 binaries will work, in my case (Windows) youtube-dl.exe and ffmpeg.exe which can you place in the same folder.
I am using the following video in this example: https://www.dumpert.nl/?selectedId=100043775_5cc0ba15
11 Oct // php the_time('Y') ?>
In my lab I have deployed Office 2019 to an Windows 2019 VM to do some testing with Citrix Virtual Apps and Desktops.
The proper way to do this is to customize the Office installation using the Office Deployment Tool (ODT). The page even lists an example containing a value to accept the EULA.
I didn’t do that, I just installed it manually (I know.) and upon first launch of any of the Office components I would always get this EULA nag screen:
So how do you get rid of this nag screen if you didn’t use ODT?
To figure that out I started Outlook whilst I ran SysInternals Process Monitor with the following Filters configured:
What I was looking for was (ideally) a registry key or value that was global to all users (so in HKLM) and for all Office components. And from the Procmon trace this Value seemed a good candidate:
17 Jun // php the_time('Y') ?>
After changing AWS accounts I resetup my API key so I could use the AWS PowerShell CmdLets.
However even though I was sure I configured everything correctly I couldn’t call any EC2 cmdlet. More about that further below but let’s refresh how to setup an API key for PowerShell:
The procedure to do this is quite simple:
First you create an IAM user (go to Services | IAM) then in the left treeview select Users or use this direct link.
Click Add users or use this direct link, give the user a name and select “Access key – Programmatic access”
In the next screen select the appropriate permissions, in this screenshot I’m using AdministratorAccess but this of course means you’re giving this user the permissions to do absolutely anything.
So have a good look at the minimum permissions that you actually require.
Click Next on the Add tags screen and the Review screen should look something like this:
On the next screen you will get the Access key ID and the Secret access key. Note that this is the only time you will get to see the Secret access key so use the copy button or Download the .csv file (but delete it from disk when you’re done of course).
It’s been a while since I last wrote a post but it does feel good so I’m expecting to pick up blogging in a more regular cadence soon!
This one is a quicky though, as I had an annoying issue with Ubuntu 22.04 VM’s running on VMware workstation.
Every time I attempted to paste a (larger) file from the host it would crash Ubuntu’s File Explorer (Nautilus):
Fortunately I found a workaround:
16 Oct // php the_time('Y') ?>
I had a strange issue today: I couldn’t open any webpage in the Edge browser on my Windows 10 machine:
The network icon was showing that there was Internet access and a quick check on the command prompt showed that the connection (including name resolution appeared to work fine):
Other browsers such as Firefox (my default browser) and Chrome also worked fine but some other Microsoft applications also didn’t work such as the Microsoft Store:
Read the rest of this entry »22 Mar // php the_time('Y') ?>
I had a strange error today using the Desktop App Converter with the parameters given from the Store for Business.
The conversion would fail with the following error:
I’m not sure why this fails as the PackageName is provided by the store and should be valid. An answer on stackoverflow suggested to use a different value for the PackageName parameter and then edit the manifest.
I don’t like this method as manual modifications of the manifest often leads to errors when submitting the application to the store.
So let’s have a look and see why we’re getting this error.
I searched for E_MANIFEST_USE_DEFAULT_VALUE_FAILED
in the DesktopAppConverter folder and found 1 occurence in ManifestOps.ps1
.
From a look at the code it wasn’t immediately clear where the validation failed so I decided to debug it.
I was trying to sign an .appx package that I created with the Desktop App Converter. However signtool returned the following error: Sign returned error: 0x800700C1
For more information, please see http://aka.ms/badexeformat
Sadly signtool doesn’t return more detailed information, even when passing the debug switch:
So what’s going on?