<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Application Compatibility on Remko's Blog</title><link>https://remkoweijnen.nl/blog/categories/application-compatibility/</link><description>Recent content in Application Compatibility on Remko's Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 30 May 2013 16:18:23 +0000</lastBuildDate><atom:link href="https://remkoweijnen.nl/blog/categories/application-compatibility/index.xml" rel="self" type="application/rss+xml"/><item><title>Redirect Registry by Modifying .NET Executable</title><link>https://remkoweijnen.nl/blog/2013/05/30/redirect-registry-by-modifying-net-executable/</link><pubDate>Thu, 30 May 2013 16:18:23 +0000</pubDate><guid>https://remkoweijnen.nl/blog/2013/05/30/redirect-registry-by-modifying-net-executable/</guid><description>&lt;p&gt;Yesterday I was troubleshooting an application that was migrated to Citrix XenApp. &lt;/p&gt; &lt;p&gt;The application is able to use a high precision scale which is attached to the client pc's com port. This com port is redirected to XenApp.&lt;/p&gt; &lt;p&gt;While testing users reported several issues, let's have a look at them.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Error configuring COM Port&lt;/u&gt;&lt;/strong&gt; &lt;br /&gt;Within the application the comport to which the scale is connected must be configured:&lt;/p&gt; &lt;p&gt;&lt;a class="glightbox thickbox" href="https://remkoweijnen.nl/blog/wp-content/uploads/2013/05/image3.webp" data-type="image" data-gallery="post-3284"&gt;&lt;img loading="lazy" decoding="async" style="display: inline" title="Compoort instellen" alt="De compoort lezer staat uit" src="https://remkoweijnen.nl/blog/wp-content/uploads/2013/05/image_thumb3.webp" width="240" height="95" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;After pressing &amp;quot;Registreer&amp;quot; to register the new com port the following error message was shown&lt;/p&gt; &lt;p&gt;&lt;a class="glightbox thickbox" href="https://remkoweijnen.nl/blog/wp-content/uploads/2013/05/image4.webp" data-type="image" data-gallery="post-3284"&gt;&lt;img loading="lazy" decoding="async" style="display: inline" title="Fout" alt="Er staat geen compoort in het register. Registreer eerste de juiste compoort" src="https://remkoweijnen.nl/blog/wp-content/uploads/2013/05/image_thumb4.webp" width="240" height="58" /&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>The case of the COM Port Redirection</title><link>https://remkoweijnen.nl/blog/2013/03/11/the-case-of-the-com-port-redirection/</link><pubDate>Mon, 11 Mar 2013 14:53:44 +0000</pubDate><guid>https://remkoweijnen.nl/blog/2013/03/11/the-case-of-the-com-port-redirection/</guid><description>&lt;p&gt;&lt;a class="glightbox thickbox" href="https://remkoweijnen.nl/blog/wp-content/uploads/2013/03/image.webp" data-type="image" data-gallery="post-3079"&gt;&lt;img loading="lazy" decoding="async" style="display: inline; float: right" title="Secutest" alt="Secutest" align="right" src="https://remkoweijnen.nl/blog/wp-content/uploads/2013/03/image_thumb.webp" width="128" height="122" /&gt;&lt;/a&gt;One of my colleagues asked me to assist in troubleshooting an application called SmartWare FM running on Citrix XenApp. &lt;/p&gt; &lt;p&gt;This application reads data from an external device called SECUTEST.&lt;/p&gt; &lt;p&gt;The device is connected to a COM port which is redirected to the XenApp session. In contrast to Microsoft Remote Desktop Services COM ports are not automatically redirected in XenApp but need to be mapped via eg a logonscript (NET USE COM1: \\Client\COM1:) or using UEM.&lt;/p&gt; &lt;p&gt;In my case the COM port was mapped with RES Workspace Manager:&lt;/p&gt; &lt;p&gt;&lt;a class="glightbox thickbox" href="https://remkoweijnen.nl/blog/wp-content/uploads/2013/03/image1.webp" data-type="image" data-gallery="post-3079"&gt;&lt;img loading="lazy" decoding="async" style="display: inline" title="image" alt="image" src="https://remkoweijnen.nl/blog/wp-content/uploads/2013/03/image_thumb1.webp" width="371" height="119" /&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Change Tab Order in an Executable</title><link>https://remkoweijnen.nl/blog/2013/01/02/change-tab-order-in-an-executable/</link><pubDate>Wed, 02 Jan 2013 15:03:14 +0000</pubDate><guid>https://remkoweijnen.nl/blog/2013/01/02/change-tab-order-in-an-executable/</guid><description>&lt;p&gt;An application called Cardiology PACS was recently packaged for a Citrix XenApp environment. The functional tester reported a strange problem at the logon screen: after entering the username it was not possible to go to the password field with the TAB key.&lt;/p&gt;
&lt;p&gt;This was a strange observation since I cannot imagine XenApp interfering with tab stops. So what was going on?&lt;/p&gt;
&lt;p&gt;In the old situation the user was starting the application on his local pc. The application remembered the last username and pre-filled this, therefore the cursor was already in the Password field. The user simply entered his password and hit the Enter key:&lt;/p&gt;
&lt;p&gt;&lt;a class="glightbox thickbox" href="https://remkoweijnen.nl/blog/wp-content/uploads/2013/01/image.webp" data-type="image" data-gallery="post-2955"&gt;&lt;img loading="lazy" decoding="async" style="display: inline;" title="image" alt="image" src="https://remkoweijnen.nl/blog/wp-content/uploads/2013/01/image_thumb.webp" width="240" height="190" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;On XenApp the Username field is not pre-filled because the last username is kept globally per machine. Therefore the user has to enter both the username and the password:&lt;/p&gt;
&lt;p&gt;&lt;a class="glightbox thickbox" href="https://remkoweijnen.nl/blog/wp-content/uploads/2013/01/image1.webp" data-type="image" data-gallery="post-2955"&gt;&lt;img loading="lazy" decoding="async" style="display: inline;" title="image" alt="image" src="https://remkoweijnen.nl/blog/wp-content/uploads/2013/01/image_thumb1.webp" width="240" height="190" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I tested the Tab key behavior in both situations and as I expected it didn&amp;rsquo;t work in both situations. This happens because the Tab Order has been messed up by the programmer (if you press Tab 9 times you do end up in the Username field).&lt;/p&gt;
&lt;p&gt;Because this is something that would annoy me if I were the user I decided to fix it.&lt;/p&gt;</description></item><item><title>File not found error when scanning using Twain Redirection in Citrix XenApp</title><link>https://remkoweijnen.nl/blog/2012/12/04/file-not-found-error-when-scanning-using-twain-redirection-in-citrix-xenapp/</link><pubDate>Tue, 04 Dec 2012 15:07:10 +0000</pubDate><guid>https://remkoweijnen.nl/blog/2012/12/04/file-not-found-error-when-scanning-using-twain-redirection-in-citrix-xenapp/</guid><description>&lt;p&gt;&lt;a class="glightbox thickbox" href="https://remkoweijnen.nl/blog/wp-content/uploads/2012/12/image.webp" data-type="image" data-gallery="post-2795"&gt;&lt;img loading="lazy" decoding="async" style="margin: 0px 0px 2px; display: inline; float: right;" title="Twain" src="https://remkoweijnen.nl/blog/wp-content/uploads/2012/12/image_thumb.webp" alt="Twain Logo" width="75" height="70" align="right" /&gt;&lt;/a&gt;Scanners attached to client machines can be used from within a Citrix XenApp session via a mechanism called Twain Redirection.&lt;/p&gt;
&lt;p&gt;For this mechanism to work correctly the file twain_32.dll must be present in the Windows directory.&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #35383d;"&gt;On Windows 2008 this dll should be copied from winsxs (side by side) to the windows directory as described in &lt;a href="http://support.citrix.com/article/CTX123981"&gt;CTX123981&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;On Windows 2003 the dll is already in the correct directory, however applications that are not &lt;a href="http://msdn.microsoft.com/en-us/library/01cfys9z%28v=vs.80%29.aspx"&gt;Terminal Server Aware&lt;/a&gt; cannot find this dll because the Windows directory is redirected to the user profile. Citrix recommends copying twain_32.dll to each user&amp;rsquo;s profile directory but this will take up unnecessary space.&lt;/p&gt;
&lt;p&gt;So what alternatives do we have?&lt;/p&gt;</description></item><item><title>Another packaging challenge</title><link>https://remkoweijnen.nl/blog/2011/01/17/another-packaging-challenge/</link><pubDate>Mon, 17 Jan 2011 09:15:37 +0000</pubDate><guid>https://remkoweijnen.nl/blog/2011/01/17/another-packaging-challenge/</guid><description>&lt;p&gt;Another post on something that happened last week, this time it&amp;rsquo;s about a Java based Application again.&lt;/p&gt;
&lt;p&gt;This particular application wanted to download three DLL&amp;rsquo;s from the Webserver to the Java bin directory.&lt;/p&gt;
&lt;p&gt;This presents us with several issues on a multi user server such as a Citrix of Terminal Server:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;&lt;span style="color: #35383d;"&gt;The user does not have write permissions in this directory&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style="color: #35383d;"&gt;If we we give the user write permissions here what happens when the DLL's are in use by another user?&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
I assumed that if I preinstalled the DLL's the application wouldn't try to overwrite them but that didn't work.
&lt;p&gt;Then I monitored with Process Monitor if the Application wrote some kind of check file but at first I didn&amp;rsquo;t find anything.&lt;/p&gt;
&lt;p&gt;So I decided to use the CorrectFilePaths shim to redirect the DLL&amp;rsquo;s to the user&amp;rsquo;s homedirectory (see &lt;a href="https://remkoweijnen.nl/blog/2010/12/28/using-the-correctfilepaths-shim-to-redirect-an-ini-file-to-a-writable-location/" target="_blank"&gt;Using the CorrectFilePaths shim to redirect an ini file to a writable location&lt;/a&gt; for an explanation).&lt;/p&gt;</description></item><item><title>Troubleshoot CorrectFilePath shim</title><link>https://remkoweijnen.nl/blog/2011/01/16/troubleshoot-correctfilepath-shim/</link><pubDate>Sun, 16 Jan 2011 20:42:03 +0000</pubDate><guid>https://remkoweijnen.nl/blog/2011/01/16/troubleshoot-correctfilepath-shim/</guid><description>&lt;p&gt;A few days ago I was packaging an application that was writing an INI file in the application directory.&lt;/p&gt;
&lt;p&gt;If you have read my earlier article, &lt;a href="https://remkoweijnen.nl/blog/2010/12/28/using-the-correctfilepaths-shim-to-redirect-an-ini-file-to-a-writable-location/" target="_blank"&gt;Using the CorrectFilePaths shim to redirect an ini file to a writable location&lt;/a&gt;, then you will probably think: create a nice shim and redirect that ini file!&lt;/p&gt;
&lt;p&gt;But this application had a few challenges, the first being that it writes %COMPUTERNAME%.INI. The application&amp;rsquo;s developer probably assumed that a user is bound to one pc and that no other user&amp;rsquo;s use that pc.&lt;/p&gt;
&lt;p&gt;To solve it we we need to catch all possible computer names (it would be nice if the CorrectFilePaths shims was able to accept wildcards and environment variables).&lt;/p&gt;
&lt;p&gt;But it doesn&amp;rsquo;t so it means we have to add a parameter for each possible computer name. In my case that was doable because I have only 8 Citrix servers.&lt;/p&gt;
&lt;p&gt;So I created a Fix using the Application Compatibility Manager as described in my previous post.&lt;/p&gt;
&lt;p&gt;However it didn&amp;rsquo;t work, so I started to trace what happens.&lt;/p&gt;</description></item><item><title>Fixing Applications: The Next Step</title><link>https://remkoweijnen.nl/blog/2011/01/07/fixing-applications-the-next-step/</link><pubDate>Fri, 07 Jan 2011 14:39:55 +0000</pubDate><guid>https://remkoweijnen.nl/blog/2011/01/07/fixing-applications-the-next-step/</guid><description>&lt;p&gt;Lately I wrote a few articles about fixing bad applications using Compatibility Shims. If you didn&amp;rsquo;t read them yet, here are the links: &lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
&lt;div&gt;&lt;a href="https://remkoweijnen.nl/blog/2010/12/28/using-the-correctfilepaths-shim-to-redirect-an-ini-file-to-a-writable-location/"&gt;Using the CorrectFilePaths shim to redirect an ini file to a writable location&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
	&lt;li&gt;
&lt;div&gt;&lt;a href="https://remkoweijnen.nl/blog/2010/12/28/using-the-correctfilepaths-shim-with-visual-basic-applications/"&gt;Using the CorrectFilePaths Shim with Visual Basic Applications&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
	&lt;li&gt;
&lt;div&gt;&lt;a href="https://remkoweijnen.nl/blog/2011/01/06/redirect-global-object-to-local-objects-aka-fix-that-bad-app/"&gt;Redirect Global Object to Local Objects (aka fix that bad app!)&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
I also described that you can install an Application Compatibility Database using the sdbinst command.
&lt;p&gt;At first I just took a script task in my Altiris Server to deploy the database using sdbinst -q &amp;lt;dbname&amp;gt; but later on I got a better idea.&lt;/p&gt;</description></item><item><title>Another Oracle Error</title><link>https://remkoweijnen.nl/blog/2011/01/07/another-oracle-error/</link><pubDate>Fri, 07 Jan 2011 13:26:20 +0000</pubDate><guid>https://remkoweijnen.nl/blog/2011/01/07/another-oracle-error/</guid><description>&lt;p&gt;My collegue that is working with me on the current project was packaging another application that uses Oracle.&lt;/p&gt;
&lt;p&gt;The interesting thing about it is that he ran into the same error I did: the Oracle client tries to create (and access) an Object in the Global namespace.&lt;/p&gt;</description></item><item><title>Redirect Global Object to Local Objects (aka fix that bad app!)</title><link>https://remkoweijnen.nl/blog/2011/01/06/redirect-global-object-to-local-objects-aka-fix-that-bad-app/</link><pubDate>Thu, 06 Jan 2011 14:34:11 +0000</pubDate><guid>https://remkoweijnen.nl/blog/2011/01/06/redirect-global-object-to-local-objects-aka-fix-that-bad-app/</guid><description>&lt;p&gt;Today I was working on Unattended Installation of an Application called SmartDocuments.&lt;/p&gt;
&lt;p&gt;The application seemed to behave nicely on a Multi User (Citrix/Terminal Server) environment: it writes user configuration to the user part of the registry and writes configuration files in a user accessible path.&lt;/p&gt;
&lt;p&gt;When testing with a normal user account I ran into a problem though, I got an Oracle ORA-01019 error message:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://remkoweijnen.nl/blog/wp-content/uploads/2011/01/ora01019.webp" class="glightbox" data-type="image" data-gallery="post-1083"&gt;&lt;img loading="lazy" decoding="async" src="https://remkoweijnen.nl/blog/wp-content/uploads/2011/01/ora01019-small.webp" alt="ORA01019" width="430" height="57" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The English message is ORA01019: unable to allocate memory in the user side.&lt;/p&gt;</description></item><item><title>Using the CorrectFilePaths Shim with Visual Basic Applications</title><link>https://remkoweijnen.nl/blog/2010/12/28/using-the-correctfilepaths-shim-with-visual-basic-applications/</link><pubDate>Tue, 28 Dec 2010 16:14:44 +0000</pubDate><guid>https://remkoweijnen.nl/blog/2010/12/28/using-the-correctfilepaths-shim-with-visual-basic-applications/</guid><description>&lt;p&gt;Earlier today I wrote about &lt;a title="Using the CorrectFilePaths shim to redirect an ini file to a writable location" href="https://remkoweijnen.nl/blog/2010/12/28/using-the-correctfilepaths-shim-to-redirect-an-ini-file-to-a-writable-location/" target="_blank"&gt;Using the CorrectFilePaths shim to redirect an ini file to a writable location&lt;/a&gt; and believe it or not the next application I was working with today needed a nice shim as well.&lt;/p&gt;
&lt;p&gt;This one was a little more complicated and that&amp;rsquo;s why I am writing a second post about it.&lt;/p&gt;
&lt;p&gt;I am not sure if this is actuall documented somewhere but a Shim is not applied to Applications or DLL&amp;rsquo;s that reside in the system directory.&lt;/p&gt;
&lt;p&gt;The application in question here is a Visual Basic 6 application which uses the VB6 runtime, msvbvm60.dll which resides usually in %systemroot%\system32.&lt;/p&gt;
&lt;p&gt;We need to do two things if we want to apply the shim to msvbvm60.dll:&lt;/p&gt;</description></item><item><title>Using the CorrectFilePaths shim to redirect an ini file to a writable location</title><link>https://remkoweijnen.nl/blog/2010/12/28/using-the-correctfilepaths-shim-to-redirect-an-ini-file-to-a-writable-location/</link><pubDate>Tue, 28 Dec 2010 13:52:01 +0000</pubDate><guid>https://remkoweijnen.nl/blog/2010/12/28/using-the-correctfilepaths-shim-to-redirect-an-ini-file-to-a-writable-location/</guid><description>&lt;p&gt;Today I needed to package an application called PlesirReality and I noticed that it wrote an ini file into the program directory (in my case D:\Apps\PlesirReality).&lt;/p&gt;
&lt;p&gt;I looked into this ini file (areastate.ini) and it writes user settings in there, like the last position of the window etc.&lt;/p&gt;
&lt;p&gt;We can see this easily with Process Monitor:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://remkoweijnen.nl/blog/wp-content/uploads/2010/12/usersrweijnenappdataroamingblogdeskuserdataimagesplesirmon11.webp" class="glightbox" data-type="image" data-gallery="post-1030"&gt;&lt;img loading="lazy" decoding="async" src="https://remkoweijnen.nl/blog/wp-content/uploads/2010/12/usersrweijnenappdataroamingblogdeskuserdataimagesplesirmon1-small7.webp" alt="PlesirMon1" width="430" height="193" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This presents us with several problems:&lt;/p&gt;
&lt;p&gt;The first problem is that the user does not have write permission in this directory so upon application exit we get an ugly error message:&lt;/p&gt;
&lt;img loading="lazy" decoding="async" src="https://remkoweijnen.nl/blog/wp-content/uploads/2010/12/usersrweijnenappdataroamingblogdeskuserdataimagesplesiruglyerror5.webp" alt="PlesirUglyError" width="428" height="119" /&gt;
&lt;p&gt;We could &amp;ldquo;fix&amp;rdquo; this by giving the user write permissions to this directory or even to this specific file but here comes the seconds problem:&lt;/p&gt;
&lt;p&gt;On a multi user environment like Citrix or Terminal Server/Remote Desktop Services it means that when one user exists he will he save his settings for all users.&lt;/p&gt;
&lt;p&gt;And then we have a third problem:&lt;/p&gt;
&lt;p&gt;When a users starts the application on another server he will not get the expected settings because each server will have it&amp;rsquo;s own copy of this ini file.&lt;/p&gt;</description></item></channel></rss>