Wednesday, December 5, 2007

How to list all installed sevice packs in C#

// Create WMI connection
ConnectionOptions
options = new ConnectionOptions();

string
machine = "127.0.0.1";

ManagementPath
path = new ManagementPath(String.Format(
@"\\{0}\root\cimv2", machine));
ManagementScope
scope = new ManagementScope(path, options);

scope.Connect();


// Query

ObjectQuery
query = new ObjectQuery(
"Select * from Win32_QuickFixEngineering");

ManagementObjectSearcher
managerTemp =
new ManagementObjectSearcher(scope, query);

//Get the results

ManagementObjectCollection
returnCollection = managerTemp.Get();


foreach
(ManagementObject managementObject in returnCollection)

{
System.Console.WriteLine("*** New Item: ");
foreach
(PropertyData propertyData in managementObject.Properties)

{
System.Console.WriteLine(" {0} : {1}",
propertyData.Name,
propertyData.Value);
}
}

Wednesday, November 7, 2007

Disconnecting users from terminal services

I'm using terminal service at my home computer, and sometimes I forget an open connection from my laptop. Since I have only 2 administration connection I get 'too many connections error.

I found this post which explains how to disconnect someone remotely from terminal services:
* qwinsta /server:12.12.12.12
List connections.
* rwinsta /server:12.12.12.12 3
Disconnect session (3)

Friday, October 12, 2007

ASP.NET 2.0 Applications not working

After installing my Win2003 server (x64) I couldn't make ASP.NET 2.0 application to work. Usually I would check the ASP.NET tab in the IIS MMC, but that tab wouldn't appear (if it does appear verify that the correct ASP.NET version is assign to the application & in the "Virtual Directory" tab, there and "Application Settings" with execute permission - "Scripts" at least)

The solution on the web didn't work:
Microsoft comments: If a previous version was not uninstalled correctly, please regedit eliminate all versions except 2.0.0.0 in the following locations:
HKET_CLASSES_ROOT\CLSID\{7D23CCC6-A390-406E-AB67-2F8B7558F6F6}\InprocServer32\
HKET_CLASSES_ROOT\CLSID\{FD5CD8B1-6FE0-44F3-BBFB-65E3655B096E} \InprocServer32\
HKEY_CLASSES_ROOT\CLSID\{FEDB2179-2335-48F0-AA28-5CDA35A2B36D}\InprocServer32\

Also re-installing .NET Framework 2.0 didn't work, nor registering ASP.NET:
%SYSTEM%\Framework64\2.0.XXX\aspnet_regiis -i

Finally I found a solution (not to the MMC yet): use a separate application pool. After creating a separate application pool for the ASP.NET 2.0 applications everything worked just fine.

Monday, October 1, 2007

How to enable Directory Browsing in IIS on Windows Vista

For some reason Microsoft moved the "Directory Browsing" feature in Windows Vista's IIS to the following location:
Control Panel ->
Programs and Features ->
Turn windows features on and off ->
Internet Information Services ->
World Wide Web Services ->
Common Http Features ->
Directory Browsing

In windows Vista you can also replace the default directory browsing with other ways to browse directories very easily (see here for example).

Wednesday, September 26, 2007

C#: NULL key in Dictionary<>

Few days ago I got an exception while enumerating a Dictionary<>. It was a null pointer exception for a key object. Since the keys in a dictionary may not be null I've started to dig and found the reason - multi threading writers to a dictionary without locks can cause null key (even if the writing was before the enumeration).

Solution: locks.

Friday, September 21, 2007

Access MDB on windows 64 bit using C#

Few days ago I had to install software I wrote in C# which uses Access MDB files on a Windows 2003 x64. After installing the software (compiled for 32bit) I got an error saying the Microsoft.Jet.OLEDB.4.0 provider is not installed.

After a short search I found out there isn't JET provider for x64 systems, however, Windows 2003 comes with 2 sets of ODBC providers: 64bit and 32bit, which can be accessed with 2 separate programs:
c:\windows\SysWOW64\odbcad.exe - 32bit providers
c:\windows\system\odbcad.exe - 64bit providers

When checking the list of x32 providers I found Access MDB provider! So at this point I started to check how to force .NET applications to run in x32 mode. 5 minutes later I had the solution - the .NET SDK utility CorFlags.exe:

CorFlags /32bit+ MyProgram.exe

Works like a charm. Now my program runs as before with Access MDB on Windows 2003 x64.

UPDATE: Better solution with the same results -
Project -> Properties -> Build
Set "Platform Target" to x86

Monday, September 3, 2007

SQLServer database grows big

I was looking around for a tool that will tell me how much space each table in my SQLServer database. After little search I found this sql script, which really helped me finding which table eat away all the space in the database.

btw - sometimes people forget that if you don't define your backup mode to "Simple" the transaction log will grow unless you backup the database.