Remko Weijnen's Blog (Remko's Blog)

About Terminal Server, Citrix, Delphi and other stuff


1,183 views

Lately I wrote a few articles about fixing bad applications using Compatibility Shims. If you didn’t read them yet, here are the links: 

I also described that you can install an Application Compatibility Database using the sdbinst command.

At first I just took a script task in my Altiris Server to deploy the database using sdbinst -q <dbname> but later on I got a better idea.

Read the rest of this entry »

1,326 views

I often hear that people configure the Paging File (on Citrix or Terminal Servers) on a seperate volume but, the reasons is either performance or the chance that the Paging File might corrupt the volume.

However if at some point you would like to create a Memory Dump you must have a paging file on the boot volume.

For a Small memory dump you need at least 2MB Paging File on the Boot Volume but for a Full Memory Dump you need a Paging File that is sufficient to hold all the physical RAM plus 1 megabyte (MB).

Side Note: with the increasing ram of today’s servers, how long does it take for a full memory dump to be saved when you have lots of gigabytes?

See also: Overview of memory dump file options for Windows Vista, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows XP, and Windows 2000.

871 views

My collegue that is working with me on the current project was packaging another application that uses Oracle.

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.

But he got an entirely different error message:

OCIEnvCreate failed with return code -1 but error message text was not available

To confirm it was the same issue I gave a test user the Create Global Objects privilege and after logging on again the problem went away.

So I applied the same fix that I wrote about yesterday in Redirect Global Object to Local Objects (aka fix that bad app!) to this application and it worked nicely!

2,160 views

Today I was working on Unattended Installation of an Application called SmartDocuments.

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.

When testing with a normal user account I ran into a problem though, I got an Oracle ORA-01019 error message:

ORA01019

The English message is ORA01019: unable to allocate memory in the user side.

Read the rest of this entry »

3,509 views

If you are implementing a Citrix, Terminal Server or even just a plain Client-Server environment you will need to create a Default User Profile at some point.

The Default User Profile can be thought of as the initial registry settings that are used when a new profile is created.

Many people think that the Default User Profile is available in regedit via HKEY_USERS\.Default but this is NOT the Default User Profile.

UsersDefault

Read the rest of this entry »

2,297 views

Today I wanted to install the Dutch Language pack for Internet Explorer 8, the Dutch language comes as part of the Windows Internet Explorer 8 MUI Pack (in my case the version for Windows Server 2003 SP2).

If you install the MUI Pack you will always end up with all 35 (!) languages installed. This behaviour is the same as the language pack for Internet Explorer 7 that I wrote about earlier (see Modifying Microsoft Updates and/or hotfixes)

The solution is really the same as for the IE7 language pack: you modify the inf file (in my case update_srv03.inf) but if you run update.exe it will refuse to use your modified inf file:

ie8muierror

So we need to patch update.exe to accept your modified version!

Read the rest of this entry »

2,484 views

Have you developed an application that accesses files and may stop because a file cannot be accessed but you need to?

Since Windows Vista it is possible to find out the name of the application which holds open a file.

And we have created a solution for you that doesn’t require a driver, nor does it need Administrator rights! Just plain user source code for you to use instantly.

We have developed a solution in Delphi that can show your user which application stalls your application. Look at these screenshots:

In fact, these dialogs are only for demonstration purposes. But you can get them in addition as a Delphi project!

The code itself is fairly easy to use. We have developed an extension to the official IFileIsInUse Interface from Microsoft.

type
  IFileIsInUse = interface(IUnknown)
    [‘{64a1cbf0-3a1a-4461-9158-376969693950}’]
    function GetAppName(out ppszName: LPWSTR) : HRESULT; stdcall;
    function GetUsage(out pfut : FILE_USAGE_TYPE) : HRESULT; stdcall;
    function GetCapabilities(out pdwCapFlags : DWORD) : HRESULT; stdcall;
    function GetSwitchToHWND(out phwnd : HWND) : HRESULT; stdcall;
    function CloseFile() : HRESULT; stdcall;
  end;

  IFileIsInUse2 = interface(IFileIsInUse)
    [‘{C69C0E72-DCE2-474D-AC16-E31B77B526B3}’]
    function GetProcessID(out pdwProcessID : DWORD) : HRESULT; stdcall;
  end;

All you have to do it to call this function provides by us:

function GetFileInUseInfo(const FileName : WideString) : IFileIsInUse2;

The name of the app is returned by the method GetAppName. And if the other application supports IFileIsInUse (call method GetCapabilities) interface you even can close the file or switch to the window.

You’ll see how it works in the demonstration project (images above) accompanied by the function GetFileInUseInfo.

Currently, we only offer a Delphi solution. C++ may available in future or when there’s enough demand for it.

Please use the Contact Form to get more information about how to obtain the solution and conditions.

1,966 views

I noticed that the monthly archives on my blog were not working. I first thought it was a problem with the .htaccess file but it was correct.

I also tried resetting the permalinks option in WordPress to default an back but that did help as well.

After some digging I was able to fix it by selecting an option in the Robots Meta plugin I use:

ArchiveSettings

I selected the Disable the date-based archives option, saved settings and de-selected it again. I am not sure what it changes (the .htaccess file was not changed) nor did I check the code to see what it does but at least it’s working again!

  • 0 Comments
  • Filed under: General
  • 913 views

    Today I needed to create a silent install for IBM WebSphere MQ, in my case version 6.0.2.10.

    I started by reading IBM’s documentation: WebSphere MQ Unattendend (silent) Installation which desribes that we can create a response file using the SAVEINI parameter.

    So I recorded a response file and tested the install using the USEINI parameter as indicated by the documentation.

    However the installation failed producing only this error message:

    One or more problems occured. Review the trace and/or log file for details. (AMQ4739)

    Read the rest of this entry »

    1,363 views

    Earlier today I wrote about Using the CorrectFilePaths shim to redirect an ini file to a writable location and believe it or not the next application I was working with today needed a nice shim as well.

    This one was a little more complicated and that’s why I am writing a second post about it.

    I am not sure if this is actuall documented somewhere but a Shim is not applied to Applications or DLL’s that reside in the system directory.

    The application in question here is a Visual Basic 6 application which uses the VB6 runtime, msvbvm60.dll which resides usually in %systemroot%\system32.

    We need to do two things if we want to apply the shim to msvbvm60.dll:

    Read the rest of this entry »

    Profile

    Recent Tweets

    Views