Wednesday, December 30, 2009

How to enable .NET Framework 3.5 SP1 Bootstrapper package in ClickOnce application.

I have struggled with the issue which I was not able to include the .NET Framework 3.5 SP1 bootstrapper package in my click once WPF XBAP application. Even If the .NET Framework 3.5 SP1 bootstrapper package is selected in the Prerequisite dialog box for a Setup project or in ClickOnce publishing, and also the "Download prerequisites from the same location as my application" option is selected, the following build error is shown: 

The install location for prerequisites has not been set to 'component vendor's web site' and the file 'dotNetFx35setup.exe' in item 'Microsoft.Net.Framework.3.5.SP1' cannot be located on disk.

To resolve this issue, please do the following steps:

Update the Package Data

  1. Open the <Drive>:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages\DotNetFx35SP1 folder or %ProgramFiles(x86)%\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages\DotNetFx35SP1 on x64 operating systems.
  2. Edit the Product.xml file in Notepad.
  3. Paste the following into the <PackageFiles> element:
    <PackageFile Name="TOOLS\clwireg.exe"/>
    <PackageFile
    Name="TOOLS\clwireg_x64.exe"/>
    <PackageFile
    Name="TOOLS\clwireg_ia64.exe"/>
  4. Find the element for <PackageFile Name="dotNetFX30\XPSEPSC-x86-en-US.exe" and change the PublicKey value to: 3082010A0282010100A2DB0A8DCFC2C1499BCDAA3A34AD23596BDB6CBE2122B794C8EAAEBFC6D526C232118BBCDA5D2CFB36561E152BAE8F0DDD14A36E284C7F163F41AC8D40B146880DD98194AD9706D05744765CEAF1FC0EE27F74A333CB74E5EFE361A17E03B745FFD53E12D5B0CA5E0DD07BF2B7130DFC606A2885758CB7ADBC85E817B490BEF516B6625DED11DF3AEE215B8BAF8073C345E3958977609BE7AD77C1378D33142F13DB62C9AE1AA94F9867ADD420393071E08D6746E2C61CF40D5074412FE805246A216B49B092C4B239C742A56D5C184AAB8FD78E833E780A47D8A4B28423C3E2F27B66B14A74BD26414B9C6114604E30C882F3D00B707CEE554D77D2085576810203010001
  5. Find the element for < PackageFile Name="dotNetFX30\XPSEPSC-amd64-en-US.exe" and change the PublicKey value to the same as in step 4 above
  6. Save the product.xml file

Download and Extract the Core Installation Files

  1. Navigate to the following URL: http://go.microsoft.com/fwlink?LinkID=118080
  2. Download the dotNetFx35.exe file to your local disk.
  3. Open a Command Prompt window and change to the directory to which you downloaded dotNetFx35.exe.
  4. At the command prompt, type:
    dotNetFx35.exe /x:
    This will extract the Framework files to a folder named “WCU” in the current directory.
  5. Copy the contents of the WCU\dotNetFramework folder and paste them in the %Program Files%\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages\DotNetFx35SP1 folder (%ProgramFiles(x86)%\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages\DotNetFx35SP1 on x64 operating systems).

Note: Do not copy the WCU\dotNetFramework folder itself. There should be 5 folders under the WCU folder, and each of these should now appear in the DotNetFx35SP1 folder. The folder structure should resemble the following:

ü  DotNetFx35SP1 (folder)

ü  dotNetFX20 (folder)

ü   dotNetFX30 (folder)

ü  dotNetFX35 (folder)

ü  dotNetMSP (folder)

ü  TOOLS (folder)

ü  en (or some other localized folder)

ü  dotNetFx35setup.exe (file)

6.       You may now delete the files and folders you downloaded and extracted in steps 2 and 4.

Please refer the following link for more details.

http://download.microsoft.com/download/A/2/8/A2807F78-C861-4B66-9B31-9205C3F22252/VS2008SP1Readme.htm#General%20Issues

Friday, December 18, 2009

How to read all countries using C#

We can use CultureInfo & RegionInfo class for getting all the countries information. From the CultureInfo class, we can get all the Culture information available in .Net Framework. Then we can use RegionInfo class for reading all the information about the region along with the Country name. Please use the following code snippet to achieve this.

static void Main(string[] args)
{
    List<string> countriesList = new List<string>();
    foreach (CultureInfo culture in CultureInfo.GetCultures(CultureTypes.AllCultures & ~CultureTypes.NeutralCultures))
    {
        if (!string.IsNullOrEmpty(culture.Name))
        {
            RegionInfo ri = new RegionInfo(culture.LCID);
            if (!countriesList.Contains(ri.EnglishName))
            countriesList.Add(ri.EnglishName);
        }
    }

    countriesList.Sort();           

    foreach (string str in countriesList)
        Console.WriteLine(str);          

    Console.ReadLine();
}


Wednesday, December 16, 2009

How to get all Culture information using C#

The CultureInfo class will provide us all Culture information available in .Net Framework.  You can use CultureInfo.Get­Cultures static method for getting all the culture information. To get associated specific culture, please use static method CultureInfo.Cre­ateSpecificCul­ture. 

The following example will show you how to get all culture information.

static void Main(string[] args)
{
     // Get culture names
     List<string> list = new List<string>();
     foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.AllCultures))
     {
          string specName = "(none)";
          try { specName = CultureInfo.CreateSpecificCulture(ci.Name).Name;}
          catch(Exception) { }

          list.Add(string.Format("{0,-12}{1,-12}{2}", ci.Name, specName, ci.EnglishName));
     }

     list.Sort();

     Console.WriteLine("CULTURE  SPEC.CULTURE  ENGLISH NAME");
     Console.WriteLine("----------------------------------------------------");

     foreach (string str in list)
          Console.WriteLine(str);

     Console.ReadLine();
}

Tuesday, November 3, 2009

How to load the WPF controls dynamically at Runtime

In order to load the WPF controls dynamically at Runtime,  please do the following steps.

1. Create a dummy XAML content file (Dynamic_Content.xaml) with Controls details.
<StackPanel
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">


    <Button x:Name="buttonStart" IsEnabled="True" Content="Start" Height="25" Width="100" Margin="5" />
    <Button x:Name="buttonStop" IsEnabled="False" Content="Stop" Height="25" Width="100" Margin="5" />


</StackPanel>

2. Select the file (Dynamic_Content.xaml) in Solution Explorer and  go to the properties.

3. Set “Build Action” as “Content” and “Copy to Output Directory” as “Copy always”.

4. Then you can use XamlReader class for reading the XAML content which we have the controls.

5. Please use the following code to read and load controls from XAML content file.



private void tab_TabItemAdded(object sender, TabItemEventArgs e)
{
    FileStream stream = new FileStream(@"Dynamic_Content.xaml", FileMode.Open, FileAccess.Read);
    StackPanel panel = XamlReader.Load(stream) as StackPanel;

    e.TabItem.Content = panel;
    e.TabItem.Header = string.Format("Tab Item - {0}", tab.Items.Count);
    stream.Close();

    Button buttonStart = panel.Children[0] as Button;
    buttonStart.Click += new RoutedEventHandler buttonStart_Click);           
}


void buttonStart_Click(object sender, RoutedEventArgs e)
{
    MessageBox.Show("Start button invloked");
}

Friday, October 30, 2009

How to push certificate to "Trusted root certificate authorities" using Installer

In order to run your Full Trust enabled WPF XBAP application, you have to use “Self signed certificate authority file” for running and deploying XBAP application. The certificate should pushed it into “Trusted Publisher” and “Authority Root” certificate storages. You can use X509Certificate2 and X509Store classes in your installer assembly for pushing the certificate to certificate storage. Please use the following code snippet.


string certPath = string.Format(@"{0}\Aaa.cer", Environment.GetFolderPath(Environment.SpecialFolder.System));
X509Certificate2 certificate = new X509Certificate2(certPath);
X509Store trustedPublisherStore = new X509Store(StoreName.TrustedPublisher, StoreLocation.LocalMachine);
X509Store trustedAuthorityRootStore = new X509Store(StoreName.AuthRoot, StoreLocation.LocalMachine);

try
{
     trustedPublisherStore.Open(OpenFlags.ReadWrite);
     trustedPublisherStore.Add(certificate);
     trustedAuthorityRootStore.Open(OpenFlags.ReadWrite);
     trustedAuthorityRootStore.Add(certificate);
}
catch (Exception ex)
{
     MessageBox.Show(ex.Message + "\n\n" + ex.StackTrace);
}
finally
{
     trustedPublisherStore.Close();
     trustedAuthorityRootStore.Close();
}


Please refer the following link to know more about “WPF - XBAP as Full Trust Application

Friday, September 25, 2009

Reading file from local system in Silverlight application

OpenFileDialog class will help us to read the one or more files from local system. The
following code snippet will help us to read the file from local machine.
 

OpenFileDialog file = new OpenFileDialog();
file.Filter = "Text files (*.txt)|*.txt|All Files(*.*)|*.*";

if (file.ShowDialog() == true)
{
     using (StreamReader reader = file.File.OpenText())
     {
          this.txtFileContent.Text = reader.ReadToEnd();
          reader.Close();
     }
}

Sunday, May 10, 2009

Signing assembly

Sy:-
sn [-q-quiet]
Options:-
-c []
Set/reset the name of the CSP to use for MSCORSN operations.
-d
Delete key container named .
-D
Verify and differ only by signature.
-e
Extract public key from into .
-i
Install key pair from into a key container named .
-k []
Generate a new key pair of the specified size and write it into .
-m [yn]
Enable (y), disable (n) or check (no parameter) whether key containers
are machine specific (rather than user specific).
-o []
Convert public key in to text file with comma separated
list of decimal byte values.
If is omitted, text is copied to clipboard instead.
-p
Extract public key from key pair in and export to .
-pc
Extract public key from key pair in and export to .
-Pb [yn]
Enable (y), disable (n) or check (no parameters) the CLR policy allowing
trusted applications to bypass strong name signature verification on their
assemblies.
-q
Quiet mode. This option must be first on the command line and will suppress
any output other than error messages.
-R[a]
Re-sign signed or partially signed assembly with the key pair in .
If -Ra is used, hashes are recomputed for all files in the assembly.
-Rc[a]
Re-sign signed or partially signed assembly with the key pair in the key
container named .
If -Rca is used, hashes are recomputed for all files in the assembly.
-Rh
Re-compute hashes for all files in the assembly.
-t[p]
Display token for public key in (together with the public key
itself if -tp is used).
-T[p]
Display token for public key of (together with the public key
itself if -Tp is used).
-TS
Test-sign signed or partially signed assembly with the key pair in
.
-TSc
Test-sign signed or partially signed assembly with the key pair in the key
container named .
-v[f]
Verify for strong name signature self consistency. If -vf is
specified, force verification even if disabled in the registry.
-Vl
List current settings for strong name verification on this machine.
-Vr [] []
Register for verification skipping (with an optional, comma
separated list of usernames for which this will take effect and an
optional test public key in ).
can be specified as * to indicate all assemblies or *, to
indicate that all assemblies with the given public key token. Public key
tokens should be specified as a string of hex digits.
-Vu
Unregister for verification skipping. The same rules for
naming are followed as for -Vr.
-Vx
Remove all verification skipping entries.
-?
-h
Displays this help text.

Ex:-
sn -R "aeembly name.dll" "keyfile.snk"

For more Info:-
http://msdn.microsoft.com/en-us/library/k5b5tt23.aspx