searchforsolutions

Just another WordPress.com site

Category Archives: MS .NET

C# : Working with .cab (cabinet) files


.NET does not have any classes for creating cabinet files out-of-box, so today I had to look what else is available out there. There are a couple of solutions I found for creating a .cab file from the .NET code. The one that actually worked for me was a library developed by Microsoft(!) as part of their Windows Installer XML (WiX) toolset. This toolset is distributed with a bunch of dlls as part of its SDK. The library that allows to create cabinet files is called Microsoft.Deployment.Compression.Cab and located under <WIX_Installation_Folder>\SDK.

In your project you need to add a reference to the Microsoft.Deployment.Compression.Cab.dll and to Microsoft.Deployment.Compression.dll (located under the same folder and has some base classes for types defined in the Microsoft.Deployment.Compression.Cab).

After doing this you can add files to a cabinet file from .NET with just a couple of line of code:

using Microsoft.Deployment.Compression.Cab;

//create a instance of Microsoft.Deployment.Compression.Cab.CabInfo
//which provides file-based operations on the cabinet file
CabInfo cab = new CabInfo(@”C:\Cabinet1.cab”);

//create a list with files and add them to a cab file
List<string> filesToArchive = new List<string>() { @”C:\file1″, @”C:\file2″ };
cab.PackFiles(null, filesToArchive, null);

//add a folder (including subdirectories) to another cab file with a maximum compression level
cab = new CabInfo(@”C:\Cabinet2.cab”);
cab.Pack(@”C:\folder”, true, Microsoft.Deployment.Compression.CompressionLevel.Max, null);

//unpack a cab file into C:\Unpacked folder
cab.Unpack(@”C:\Unpacked”);

The library has an MSDN style help file located under <WIX_Installation_Folder>\doc\DTFAPI.chm.

Another dll that also comes with WiX toolset SDK is Microsoft.Deployment.Compression.Zip.dll that provides similar functionality for packing and unpacking zip files.

Ref: http://wix.sourceforge.net/

C# : Credentials management on windows 2008


I was looking at options to save credentials on Wnidows platform.The traditional way is registry or DB or filesystem.But then one has to keep an eye on security issues & other headaches that follow.

Then i saw this feature in W2K8 ,”Credentials Manager”. The API for it are in C/C++ , but i needed a solution in C#. So I triaged a bit & came across a solution for the same http://www.microsoft.com/indonesia/msdn/credmgmt.aspx .

Another one : http://www.developerfusion.com/code/4693/using-the-credential-management-api/

Enjoy!

How to supply dedicated credentials for webproxy authentication in WCF client – Part 2


In my previous blog about the same topic we talked about webproxy authentication in WCF client using configuration file changes.

But the same can be solved programmatically.I’m going to discuss the same here.Its pretty simple & straight forward!

In the code where you initialise you application much before any WCF service calls are made, insert the following piece of code

WebProxy wproxy = new WebProxy(“http://<proxy address>:<proxy port>”, true,null,new NetworkCredential(“<user name>”, “<user password>”,”<domain>”));
WebRequest.DefaultWebProxy = wproxy;

The WCF runtime will acquire proxy setting from WebRequest.DefaultWebProxy property if the <system.net> and WCF <binding> remains useDefaultproxy as “true”.

Then you are done!

How to supply dedicated credentials for webproxy authentication in WCF client – Part 1


This fix assumes you have deployed the application & it is running under the credentials of the user with access to internet.Set the proxy in IE which is the default web proxy or for system web proxy use netsh to setup winhhtp proxy.

<system.serviceModel>
<bindings>
<basicHttpBinding …. useDefaultWebProxy=”Boolean”>
….

<bindings>
</basicHttpBinding>
<system.serviceModel>
<system.net>
<defaultProxy useDefaultCredentials=”true”/>
</system.net>

useDefaultWebProxy:A Boolean value that specifies whether the auto-configured HTTP proxy of the system should be used, if available. The default is true.

The above settings will autheticate the user against the proxy for WCF clients

In my next post we will see how to do it programmatically

Reference :
1. For understanding System.serviceModel configuration refer Ref:http://msdn.microsoft.com/en-us/library/ms731361.aspx
2. For understanding System.net configuration refer refer Ref:http://msdn.microsoft.com/en-us/library/kd3cf2ex.aspx. Do read this section if your proxy configuration uses other mechansims like automatic detetcion,script etc.
3. A good short blog on the same topic as above : http://blogs.msdn.com/b/stcheng/archive/2008/12/03/wcf-how-to-supply-dedicated-credentials-for-webproxy-authentication.aspx