:: Home

  login:         
  passwords:  

Winforms Interview Questions

Windows Forms Deployment
Windows Forms Controls
Windows Forms Data Binding
Windows Forms Datagrid
Windows Forms Docking
Windows Forms Keyboard Handling
Windows Forms Layout
Windows Forms Licensing
Windows Forms Menus
Windows Forms Mouse Handling
Windows Forms from MFC
Windows Forms from VB6
Windows Forms Patterns
Windows Forms Printing
Windows Forms Resources
Windows Form Scrolling
Windows Forms Tips
Windows Forms Common Dialogs
Windows Forms Listbox
Windows Forms ComboBox
Windows Forms Rich TextBox
Windows Forms ListView
Windows Forms TreeView
Windows Forms Button
Windows Forms TabControl
Windows Forms TextBox
Windows Forms MDI
Windows Forms Cursors
Windows Forms WebBrowser
Windows Forms PictureBox
Windows Forms Form
Windows Forms MDI
Windows Forms In IE
GDI+Bitmaps&Images
GDI+Font
GDI+Color
GDI+Brushes
GDI Drawing Tips
GDI+ from GDI
GDI Paths Regions
GDI+Pens
Interioerability WIn32
Tools Metadata Viewers
Design Time Serialization
Design Time Custom Designers
Design Time Tips
Design Time Type Editors
Vs.Net Tips
Vs.Net Debugging
Vs.Net Macros
Framework Tips General
Framework Tips Events
Framework Tips General IO
Framework Tips Strings
Framework Tips Threading
Tool Resource Editor
Design Time UI
Framework Tips CGI
Framework Tips XML

WPF Interview Qs

SilverLight Interview Qs

SAP Interview Questions

Oracle Interview Questions

PHP Interview Questions

Ajax Interview Questions

IIS 7.0

OOP Interview Questions

Ruby Interview Questions

Sql Server Interview Questions

SharePoint 2007 Questions

Microsoft Crm Questions

Windows Forms Deployment

The General Winforms Interview Questions consists the most frequently asked questions in Winforms. This list of 100+ questions guage your familiarity with the Winforms platform. The q&a have been collected over a period of time from various blogs, forums and other similar Winforms sites

1. Windows Forms Deployment

    1.1 How can I run an EXE from within my application?
    1.2 What are the common issues in redirecting assemblies using the publisher policy files?
    1.3 How can I find all programs with a GUI (not just arbitrary windows) that are running on my local machine?
    1.4 How can I get a list of all processes running on my system?
    1.5 How can I make sure there is only one instance of my application running?
    1.6 How do I determine which operating system is running?
    1.7 How can I get all IP addresses for my local machine?
    1.8 My user does not have .NET installed. Will he be able to run my Windows Forms application?
    1.9 How do I get the path to my running EXE?
    1.10 How can I programmatically obtain the name of the assembly that the code is executing in ?
    1.11 How can I see what is installed in the Global Assembly on a machine?
    1.12 How do I set the company name that is returned by System.Windows.Forms.Application.CompanyName?

1.1 How can I run an EXE from within my application?

Use the Process class found in the System.Diagnostics namespace.

[C#]
Process proc = new Process();
proc.StartInfo.FileName = @"Notepad.exe";
proc.StartInfo.Arguments = ""; proc.Start();
[VB.NET]

Dim proc As New Process()
proc.StartInfo.FileName = "Notepad.exe"
proc.StartInfo.Arguments = ""
proc.Start()

1.2 What are the common issues in redirecting assemblies using the publisher policy files?

1) Make sure to follow proper naming conventions for the policy dll. For example, if the original assembly name is TestAssembly.dll then the corresponding policy assembly should be called "policy.1.0.TestAssembly.dll" to make this redirection work for all "1.0.*" version bindings of the original assembly.
2) While specifying the name for the assembly in the policy file, do not include the ".dll" extension. This is wrong:

>assemblyIdentity name="TestAssembly.dll" publicKeyToken="f638d0a8d5996dd4" culture="neutral" /<
Instead use:
>assemblyIdentity name="TestAssembly" publicKeyToken="f638d0a8d5996dd4" culture="neutral" /<
3) Make sure to sign the policy assembly with the same strong name as the original.
4) Make sure to distribute the policy file along with the policy assembly. Installing the policy assembly in the GAC alone will not suffice. Note that any change made to the policy file after creating the policy assembly will not take effect.
5) Always use /link (to the policy file) in the "al" command while creating the policy assembly. Do not use /embed. It doesn't seem to be supported.

1.3 How can I find all programs with a GUI (not just arbitrary windows) that are running on my local machine?

You could use EnumWindows with p/Invoke, but using the static Process.GetProcesses() found in the System.Diagnostics namespace will avoid the interop overhead.

[C#]
Using System.Diagnostics;
...
foreach ( Process p in Process.GetProcesses(System.Environment.MachineName) )
{
if( p.MainWindowHandle != IntPtr.Zero)
{
//this is a GUI app
Console.WriteLine( p ); // string s = p.ToString();
}
}
[VB.NET]


Imports System.Diagnostics
...
Dim p As Process
For Each p In Process.GetProcesses(System.Environment.MachineName)
If p.MainWindowHandle <> IntPtr.Zero Then
'this is a GUI app
Console.WriteLine(p) ' string s = p.ToString();
End If
Next p

There is one potential problem on Windows 98. If a process was started with ProcessStartInfo.UseShellExecute set to true, this MainWindowHandle is not available.

1.4 How can I get a list of all processes running on my system?

Use the static Process.GetProcesses() found in the System.Diagnostics namespace.

[C#]
Using System.Diagnostics;
...
foreach ( Process p in Process.GetProcesses() )
Console.WriteLine( p ); // string s = p.ToString();

[VB.NET]
Imports System.Diagnostics
...
Dim p As Process
For Each p In Process.GetProcesses()
Console.WriteLine(p) ' string s = p.ToString()
Next p

1.5 How can I make sure there is only one instance of my application running?

In it, we uses the Process class in System.Diagnostics to implement this functionality using code such as

[C#]
public static Process RunningInstance()
{
Process current = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName (current.ProcessName);
//Loop through the running processes in with the same name
foreach (Process process in processes)
{
//Ignore the current process
if (process.Id != current.Id)
{
//Make sure that the process is running from the exe file.
if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == current.MainModule.FileName)
{
//Return the other process instance.
return process;
}
}
}
//No other instance was found, return null.
return null;
}

[VB.NET]
Public Shared Function RunningInstance() As Process
Dim current As Process = Process.GetCurrentProcess()
Dim processes As Process() = Process.GetProcessesByName(current.ProcessName)
'Loop through the running processes in with the same name
Dim process As Process
For Each process In processes
'Ignore the current process
If process.Id <> current.Id Then
'Make sure that the process is running from the exe file.
If [Assembly].GetExecutingAssembly().Location.Replace("/", "\") = current.MainModule.FileName Then
'Return the other process instance.
Return process
End If
End If
Next process
'No other instance was found, return null.
Return Nothing
End Function 'RunningInstance

1.6 How do I determine which operating system is running?

The Environment class in the System namespace has this information.

[C#]
string versionText = Environment.OSVersion.Version.ToString();

[VB.NET]
Dim versionText As String = Environment.OSVersion.Version.ToString()

1.7 How can I get all IP addresses for my local machine?

[C#]
string s ="";
System.Net.IPAddress[] addressList = Dns.GetHostByName(Dns.GetHostName()).AddressList;
for (int i = 0; i < addressList.Length; i ++)
{


s += addressList[i].ToString() + "\n";
}
textBox1.Text = s;

[VB.NET]
Dim s As String = ""
Dim addressList As System.Net.IPAddress() = Dns.GetHostByName(Dns.GetHostName()).AddressList
Dim i As Integer
For i = 0 To addressList.Length - 1
s += addressList(i).ToString() + ControlChars.Lf
Next i
textBox1.Text = s


1.8 My user does not have .NET installed. Will he be able to run my Windows Forms application?

No, the .NET runtime platform has to be on any machine that will run your Windows Forms application. Microsoft has made the .NET runtime platform installation (dotnetredist.exe) available as a free download from Microsoft .NET Framework Redistributable .


1.9 How do I get the path to my running EXE?

The Application class has a static member ExecutablePath that has this information.


[C#] textBox1.Text = Application.ExecutablePath;

[VB.NET] TextBox1.Text = Application.ExecutablePath

1.10 How can I programmatically obtain the name of the assembly that the code is executing in ?

The following code snippet demonstrates how you can obtain the name of the assembly that the code is executing in:

[C#]
MessageBox.Show(System.Reflection.Assembly.GetEntryAssembly().GetName().Name);
[VB.NET]
MessageBox.Show(System.Reflection.Assembly.GetEnTryAssembly().GetName().Name)

1.11 How can I see what is installed in the Global Assembly on a machine?

Use Windows Explorer to view the C:\WINNT\assembly folder. If the .NET Framework is installed, the Windows Explorer will show a custom view of this folder. Use the detailed view to see the details of each assembly.


1.12 How do I set the company name that is returned by System.Windows.Forms.Application.CompanyName?

This is an assembly attribute. The VS development environment sets it in the AssemblyInfo.cs (vb) file. If you open that file, you will see a block of assembly attributes that you can set, including company and version numbers.

Copyright 2007, Megasolutions Ltd