I was playing around with localization when I encountered the following behaviuor: I set time & number format to "French (Canada)", and wrote:
DateTime.Now.ToString("dd/MM/yyyy")
I got:
12-12-2007
Instead of "/" I got "-".
I was looking around and couldn't find any documentation saying '/' is a special character in DateTime format string. Finally I used the following string which worked just fine:
DateTime.Now.ToString(@"dd\/MM\/yyyy")
Wednesday, December 12, 2007
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(
scope.Connect();
// Query
ObjectQuery query = new ObjectQuery(
ManagementObjectSearcher managerTemp =
//Get the results
ManagementObjectCollection returnCollection = managerTemp.Get();
foreach (ManagementObject managementObject in returnCollection)
{
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)
{
}foreach (PropertyData propertyData in managementObject.Properties)
{
System.Console.WriteLine(" {0} : {1}",
}propertyData.Name,
propertyData.Value);
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)
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)
Labels:
RDP,
Telminal Services
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.
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).
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).
Labels:
IIS,
Windows Vista
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.
Solution: locks.
Labels:
C#
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
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.
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.
Labels:
SQL Server
Saturday, August 25, 2007
IE opens KMZ as ZIP
Yesterday I've decided to play around with Google Earth so I wrote a small KMZ file, which I've uploaded to my site. However when I've tried to download the KMZ, IE opened the file as ZIP.
After a short search I found out the reason: my hosting site didn't add the Google Earth MIME extension (see the bottom of that page) to the Apache server. Since I don't have the privileges to add the extensions I was looking for a work around. One way I found was to put my KMZ in Google Pages. Ugly and probably not allowed with Google Pages license - putting a file in Google Page as storage only.
After some more digging I found the following solution - create a script that add the correct MIME header (I used PHP but I guess you can do it in ASP very easily):
<?php
header('Content-type: application/vnd.google-earth.kmz');
header('Content-Disposition: attachment; filename="myfile.kmz"');
readfile('myfile.kmz');
?>
After a short search I found out the reason: my hosting site didn't add the Google Earth MIME extension (see the bottom of that page) to the Apache server. Since I don't have the privileges to add the extensions I was looking for a work around. One way I found was to put my KMZ in Google Pages. Ugly and probably not allowed with Google Pages license - putting a file in Google Page as storage only.
After some more digging I found the following solution - create a script that add the correct MIME header (I used PHP but I guess you can do it in ASP very easily):
<?php
header('Content-type: application/vnd.google-earth.kmz');
header('Content-Disposition: attachment; filename="myfile.kmz"');
readfile('myfile.kmz');
?>
Labels:
Google Earth,
KMZ,
PHP
Wednesday, August 15, 2007
Microsoft CRM - Outlook client doesn't load...
I've just finished fighting with MS-CRM Outlook add-in. It was really time consuming for no good reason.
The battle story:
The MS-CRM was working just fine from the IE interface but I wanted the Outlook interface. After installing the Outlook add-in I got the following message when I started Outlook:
"There is a problem communicating with the Microsoft CRM Server. The server might be unavailable. Try again later. If the problem persists, contact your system administrator."
I found two posts in the MS-Knowledge Base which didn't helped at all:
http://support.microsoft.com/kb/910090
http://support.microsoft.com/kb/913509/
After digging some more in the MS news groups I found the solution (for me, and I guess for most poeple with CRM out-of-the-box). You can skip to step 3 in order to verify this is your problem with the CRM.
1. Add the CRM site to the trusted sites list in IE (Tools->Internet Options->Security, click on "Trusted Sites" then "Sites" and add the site URL).
2. Verify that the trusted sites passwords are stored in IE (Tools->Internet Options->Security, click on "Trusted Sites" then "Custom Level", go all the way down to "User Authentication" -> "Logon", and choose "Automatic logon with username and password")
3. Open MS-CRM in Internet explorer and insert the password. Close IE. Open again and verify you don't have to enter the password again. If you do, you did something wrong in steps 1 or 2.
4. Open Outlook.
The battle story:
The MS-CRM was working just fine from the IE interface but I wanted the Outlook interface. After installing the Outlook add-in I got the following message when I started Outlook:
"There is a problem communicating with the Microsoft CRM Server. The server might be unavailable. Try again later. If the problem persists, contact your system administrator."
I found two posts in the MS-Knowledge Base which didn't helped at all:
http://support.microsoft.com/kb/910090
http://support.microsoft.com/kb/913509/
After digging some more in the MS news groups I found the solution (for me, and I guess for most poeple with CRM out-of-the-box). You can skip to step 3 in order to verify this is your problem with the CRM.
1. Add the CRM site to the trusted sites list in IE (Tools->Internet Options->Security, click on "Trusted Sites" then "Sites" and add the site URL).
2. Verify that the trusted sites passwords are stored in IE (Tools->Internet Options->Security, click on "Trusted Sites" then "Custom Level", go all the way down to "User Authentication" -> "Logon", and choose "Automatic logon with username and password")
3. Open MS-CRM in Internet explorer and insert the password. Close IE. Open again and verify you don't have to enter the password again. If you do, you did something wrong in steps 1 or 2.
4. Open Outlook.
Labels:
Microsoft CRM,
Outlook
Sunday, July 1, 2007
Leaking Form.ShowDialog
In the last few weeks I was debugging an application to find leaking memory. I found lots of tips in this MSDN article. Something I found few times is that people are not aware that you MUST call Dispose() after you call ShowDialog (see Microsoft docs).
The simplest way to create a memory leak with a form:
{
Form form = new FooForm();
form.Owner = this
form.ShowDialog();
}
After this code block will finish the form "form" will stay in the memory because the owner form holds a refrence to the form in OwnedForms. To free the memory you must call form.Dispose();
The simplest way to create a memory leak with a form:
{
Form form = new FooForm();
form.Owner = this
form.ShowDialog();
}
After this code block will finish the form "form" will stay in the memory because the owner form holds a refrence to the form in OwnedForms. To free the memory you must call form.Dispose();
Labels:
.NET Debugging,
C#,
Memory Leak
Monday, May 28, 2007
Fast DataTable loading from IDataReader
I was using the Load method of DataTable to load data from IDataReader the other day, and while profiling the application I found out that this is my program bottleneck.
I've just wrote a quick & dirty function which does the same task much faster:
I've just wrote a quick & dirty function which does the same task much faster:
private static DataTable ReaderToDataTable(IDataReader reader)
{
int fieldCount = reader.FieldCount;
DataTable result = new DataTable("Query Result");
for (int i = 0; i < reader.FieldCount; i++)
{
DataColumn column = result.Columns.Add(reader.GetName(i));
column.DataType = reader.GetFieldType(i);
}
object[] row = new object[fieldCount];
while (reader.Read())
{
reader.GetValues(row);
result.Rows.Add(row);
}
return result;
}
Labels:
C#,
Performance
Friday, May 25, 2007
Friday, May 18, 2007
Creating a MOSS Demo/Test machine
I've being installing a testing virtual machine for MOSS 2007 related application. While searching the internet I've found this post which describe step by step how to install MOSS machine.
Labels:
MOSS
Memory Debugging in .NET applications
Long time ago I found a post regarding memory debugging in .NET applications:
Analyzing Common CLR Performance Problems
That post address lots of memory leak types, while usually I encouter memory leaks from the heap. Here's the summary how to find heap memory leaks:
1. Start the windows debugger: WinDbg (can be downloaded from here).
2. Attach to the target .NET process
3. Load the SOS module, in the WinDbg console write:
.loadby sos mscorwks
4. List all the allocated objects:
!dumpheap -stat
At this point you can break & resume the program as you wish.
Other Useful commands:
!finalizequeue - show the list of objects waiting for finalize thread
!threads - running threads
!eeheap -gc - show the object generations in the GC
Full (?) list of commands can be found here
Analyzing Common CLR Performance Problems
That post address lots of memory leak types, while usually I encouter memory leaks from the heap. Here's the summary how to find heap memory leaks:
1. Start the windows debugger: WinDbg (can be downloaded from here).
2. Attach to the target .NET process
3. Load the SOS module, in the WinDbg console write:
.loadby sos mscorwks
4. List all the allocated objects:
!dumpheap -stat
At this point you can break & resume the program as you wish.
Other Useful commands:
!finalizequeue - show the list of objects waiting for finalize thread
!threads - running threads
!eeheap -gc - show the object generations in the GC
Full (?) list of commands can be found here
Labels:
.NET Debugging
Subscribe to:
Posts (Atom)