Firefox 0×8001010e errors

October 21st, 2010

I recently began encountering intermittent 0×8001010e errors when trying to display .ASP content from my web site in Firefox.  The problem didn’t manifest when using IE.  Googling the error code didn’t provide any solutions, but it did point out that the error had something to do with “marshalling” something to the wrong thread.  It was suggested that my application needed to be configured as its own “highly protected” application but doing this did not solve the problem.

After much head scratching and cursing, I began to wonder if Firefox might be keeping the connection to my web server open and somehow confusing IIS and my application.  I finally changed the network.http.keep-alive setting to False in about:config in Firefox.  This seems to have solved the problem for now.

It sure would be nice to know why that was causing a problem though.

Not Enough Storage is Available to Process This Command Errors

June 29th, 2010

We recently started having problems on one of our servers.  Processes would start dieing with “Not enough storage is available to process this command” errors. It turns out that this is a catch all error that Windows uses when it runs out of resources of almost any kind.  It rarely has anything to do with the amount of memory or disk installed on your system.  Some of the things that can causes the error to occur are:

  1. System paged pool is exhausted.
  2. System non-page pool in exhausted.
  3. Maximum IRP stack size has been exceeded.
  4. Any number of other things that I have not been able to find documented.

Read the rest of this entry »

Delaying the Loading of Specific Services

June 29th, 2010

On some systems, it may be necessary to delay the loading of specific services in order to allow those services to start successfully.  For example, on one of our servers, the Firebird service suddenly refused to start automatically when the system was rebooted.  We could start it manually but it would fail with error 1055 (service database is locked) when attempting to start automatically.

Apparently, the service database is always locked during the early phases of the boot process.  So, in order to get Firebird to start we needed to delay Windows’ attempts to automatically start the Firebird service.  To do this, you need to make Firebird dependent on another service.  If you do that, Windows will not try to start Firebird until that other service has started.  We chose to make Firebird dependent on the Server service since all systems must have the Server service running if you want to be able to do anything at all.

Read the rest of this entry »

Forcing a Delphi Program to Run with Administrator Privilege

June 21st, 2010

No matter how hard you try to eliminate the need for administrator access from your programs, sometimes they just need to run as administrator in order to work.  I came across this requirement while recoding our application’s configuration utility.  I dutifully removed all configuration entries  from the registry and moved them to the “All Users” folder but I needed to be able to configure some of our programs to run as Windows services.  No matter how you look at it, this requires administrator privilege.

I didn’t want to force our users to “run as administrator” on Vista, Windows 7 and Windows 2008.  Can you imagine the number of support calls that would generate? :(  So, I starting looking for a way to force the program to request administrator privilege .

Read the rest of this entry »

Configuring a (more-or-less) Secure FTP Site on Windows 2003

February 12th, 2010

For a long time we have had an FTP site that we used for transferring files around inside our firewall.  No one from the outside world had access so security wasn’t a concern.  We allowed anonymous FTP access and life was good.

Then we suddenly had a need to allow people from outside the firewall to upload files to our server.  It would have been too much trouble to change our existing site to forbid anonymous access because we had a lot of automated processes in place that expected to be able to log on anonymously.  So we chose to set up a second FTP site on the same server that would require users to log on with a specific user id and password and to be restricted to their own home directory once they were connected.  This turned out to be both easier and more difficult than you would expect.

Read the rest of this entry »

IBObjects, Firebird and “request synchronization” Errors

January 19th, 2010

I have been in the process of migrating my applications from an older version of IBOjects to version 4.8.6.  Not the latest version but good enough for my purposes.  Anyway, in certain circumstances, one of my applications started throwing “request synchronization error” exceptions. It never did this when running under the older version of IBObjects.  I spent quite a bit of time debugging my application and IBOjects trying to find a reason for the error with no luck.  Finally, just for something to try, I replaced fbclient.dll with the latest version and the problem is now gone.  Go figure!

Getting the List of Configured DNS Servers

January 13th, 2010

If you ever find yourself in a position where you need to know that IP addresses of the DNS servers configured on a Windows system just use the GetNetworkParams Windows API call.  This is not implemented in the Delphi 2007 component library, but luckily it is implemented in the Jedi Code library.

Custom Variant Wrapper for TDataset - Part 6

January 6th, 2010

In Part 5 we discussed casting our custom variant to and from other data types.  In this part we will discuss implementing dynamic functions and procedures.   Dynamic functions are implemented by overriding TPublishableVariantType.DoFunction and dynamic procedures are implemented by overriding TPublishableVariantType.DoProcedure.

Read the rest of this entry »

Custom Variant Wrapper for TDataset - Part 5

January 4th, 2010

In Part 4 I showed you how to get and set dynamic properties of our custom variant.  In this part I will show how custom variants can be cast to and from other data types.

Read the rest of this entry »

Custom Variant Wrapper for TDataset - Part 4

January 1st, 2010

In Part 3 we discussed clearing and copying our custom variant.  Next I am going to show you how to implement dynamic properties for our TDataset wrapper.  If you remember from the introduction to this series of articles, I wanted to be able to get the value of a dataset’s fields’ values using the name of the field as the property name.  Like this: variant.field_name.

Read the rest of this entry »