638
Chapter 13 • Application Deployment
Step 3 can be done using the File Signing tool (signcode.exe).Although it is
a command-line utility that requests a whole series of options to be filled in, you
should locate the file with the Windows Explorer and double-click it.The Digital
Signature Wizard will be started, which takes you through the whole process in
an easy and straightforward way.You can check if the assembly is indeed signed
by performing the following steps:
1. Use the Windows Explorer to locate the assembly you just signed.
2. Right-click the file and select Properties.
3. Select the Digital Signature tab (see Figure 13.5).
4. Select the Certificate in the Signature List and click on Details to
view the Certificate. It should look familiar.
Steps 4, 5, and 6 have already been discussed. Step 7 should speak for itself—
testing has always been something that does not get the highest priority. But it
cannot be emphasized enough:Testing is a very important step in the develop-
ment and deployment process of an application. It doesn’t matter whether 
you’re dealing with a large and complex application or a single control. Never 
cut back on testing—you earn it back in all the hours you don’t have to spend
on troubleshooting.
www.syngress.com
Figure 13.5
The Proof of a Signed Assembly
Pdf change page order - re-order PDF pages in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support Customizing Page Order of PDF Document in C# Project
how to move pages around in pdf; reorder pdf pages reader
Pdf change page order - VB.NET PDF Page Move Library: re-order PDF pages in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Sort PDF Document Pages Using VB.NET Demo Code
rearrange pages in pdf reader; how to rearrange pdf pages in preview
Application Deployment • Chapter 13
639
Summary
With the .NET Framework application deployment has become easy again—no
battles with DLL versions and Registry settings.You are able to focus on what is
really important: going smoothly through the deployment phases.The first step in
deploying is versioning. This is sort of new from what you were used to. But now
you can run multiple versions of the same assemblies next to each other. It is
important that assemblies have correct version numbers so that assemblies can
bind with correct assemblies.To achieve this, it is important that assemblies get
full names, consisting of a name, strong name, culture (also known as locale or
localization), and a version number.The use of full names is also necessary to
share them.After this is taken care of, you can go to the next step, which is the
way the assemblies are going to be packaged for deployment.There are three
choices: do not package them, just XCOPY them; package every assembly in a
Cabinet file; or package the complete application in a Windows Installer file.The
packaging method depends through which channels you want the application to
distribute.Assemblies attribute also to the organization of data.All programs need
different kinds of resources, such as Help files, images, and audio files. By con-
verting these files into resource files, you can package them in assemblies without
executable code.These are called satellite assemblies, which are very useful to
solve deploying localized applications. By given them a culture identification, the
CLR will automatically pick up the resource assemblies with the correct localiza-
tion. Localized assemblies can be added without having to bring the application
down or to restart it.
Although you do not need to get involved in all kinds of registering of DLL
files, using Class Identifiers and other Registry settings, a lot of configuring is still
going on. Only now, they are different types of XML-coded configuration files.
Every application can have its application configuration file; every machine has its
machine configuration file (also called an administrator configuration file) and
security configuration files. Every possible setting is controlled by these configu-
ration files and enables you to go from a generic configuration to a tailor-made
configuration.
Before you can actually deploy an application, you must be sure that the
machines that run the application indeed have the .NET Framework runtime
installed.When you use Windows Installer, it can take a lot of work out of your
hand installing, and also uninstalling, of the application, especially because
Windows Installer recognizes assemblies and knows how to handle them, such as
installing them in the general assembly cache. CAB files are especially useful if
www.syngress.com
VB.NET Word: Change Word Page Order & Sort Word Document Pages
Note: if you are trying to change the order controls, please read this Word reading page which has powerful & profession imaging controls, PDF document, image
how to move pages in pdf converter professional; pdf rearrange pages online
C# Word - Process Word Document in C#
various Word document processing implementations using C# demo codes, such as add or delete Word document page, change Word document pages order, merge or
how to rearrange pdf pages; reorder pages in pdf document
640
Chapter 13 • Application Deployment
you want to distribute the assemblies using the Internet Explorer 5.5 (and up).
When you want to deploy .NET Controls, which you can compare with ActiveX
Controls, issues such as licensing and signing are involved.
After deployment of an application, you do not have to reboot the system,
and you can easily replace assemblies, just by adding a new version of the
assembly to the assembly cache.You can modify configuration files, and the next
time an assembly is loaded by the CLR, the modified configuration file is used.
Solutions Fast Track
Packaging Code
;
An assembly has a Manifest that describes in detail what is wrapped in
the assembly and with which other assemblies it will bind.
;
An assembly is identified by its full name that consist of a name, string
name, version number and culture (localization identifier).
;
A single assembly can be packaged in a Cabinet (CAB) file, using the
Cabinet Maker (makecab.exe).
;
A complete .NET application can be packaged in a Windows Installer file.
Configuring the .NET Framework
;
Application dependent settings can be set in the application configura-
tion file.This file applies to all assemblies that are part of an application.
;
Machine dependent settings can be set in the machine/administrator file.
This file applies to all applications that run on this machine. Settings in
the application configuration file can not override the settings in the
machine configuration file.
;
There are three security configuration files: enterprise, which applies to
one or more systems and applications; user, which is related to the user
that starts up an application (every user has his own security configuration
file; and machine, which applies to a single machine that runs one or more
applications (every machine has its own security configuration file).
www.syngress.com
C# PDF File & Page Process Library SDK for C#.net, ASP.NET, MVC
Convert Jpeg to PDF; Merge PDF Files; Split PDF Document; Remove Password from PDF; Change PDF Permission Settings. C# File: Split PDF; C# Page: Insert PDF pages
reorder pages pdf; move pages in pdf acrobat
C# PowerPoint - Sort PowerPoint Pages Order in C#.NET
control, developers can swap or adjust the order of all or several PowerPoint document pages, or just change the position of certain one PowerPoint page in an
pdf rearrange pages online; reverse pdf page order online
Application Deployment • Chapter 13
641
Deploying the Application
;
Before a .NET application can be deployed, the .NET Framework run-
time system must be installed on all the machines that will run (a part
of) the application.
;
With Windows Installer 2.0, a complete .NET application can be
installed and, if needed, be uninstalled later on.Windows Installer 2.0 is
fully assembly-aware and can take care of placing and updating assem-
blies in the general assembly cache.Windows Installer 2.0 keeps an inde-
pendent administration of assemblies it has installed and are referenced
by other assemblies installed by Windows Installer 2.0; it will never
remove a uninstalled assembly if it is still referenced by other assemblies.
;
With CAB files, you not only compress an assembly significantly, but it
can also be deployed using Internet Explorer 5.5 (or higher).
;
The nonexecutable data files—such as Help files, audio files, and
images—that are used by assemblies are converted in resource files (using
the Resource Generator utility resgen.exe) that can be added to
assembly files that hold executable code.They can also be compiled into
an assembly without executable code, using the Assembly Generation
utility (al.exe).This is called a satellite assembly, which are very useful in
deploying localized applications.
Deploying Controls
;
You can protect your controls by licensing them, using the License
Compiler utility (lc.exe).
;
You can authenticate your controls using a X.509 Authenticode
Certificate, with the File Signing utility (signcode.exe), that comes
with a Digital Signature Wizard.
www.syngress.com
C# Word - Sort Word Pages Order in C#.NET
library control, developers can swap or adjust the order of all or several Word document pages, or just change the position of certain one Word page in an
reorder pages in a pdf; how to move pages around in pdf
VB.NET PDF File & Page Process Library SDK for vb.net, ASP.NET
VB.NET PDF - How to Modify PDF Document Page in VB.NET. VB.NET Guide for Processing PDF Document Page and Sorting PDF Pages Order.
how to rearrange pdf pages online; how to move pages around in pdf file
642
Chapter 13 • Application Deployment
Q:
If I can XCOPY a .NET application to its destination, why should I use
Installer instead?
A:
You don’t need to use Installer; XCOPY will work just fine. But when you
need to deploy a more complex application, you may want to do a little more
than just an XCOPY.The most obvious is that you need to install shared
assemblies in the general assembly cache (GAC).Additionally, if you want to
uninstall the application, removing the sub tree will not remove assemblies
from the GAC. Besides how do you know if you can safely remove an
assembly from the cache without breaking another application? If you install
all your application with Windows Installer, Installer will take care of
removing an assembly when it is safe to.That is, if you install all the applica-
tions using Installer 2.0. It is a good practice to be able to install an applica-
tion with an as small as possible footprint and uninstall applications without
leaving a footprint. Packaging your application with Windows Installer takes
all that work away from you and the people who are responsible for the
installation and maintenance of the application. By the way, it looks far more
professional than copying files from a CD.
Another reason to use Windows Installer 2.0 is that you may have to inte-
grate with applications that run outside the .NET Framework or even ship
unmanaged components with the application, that still have all the installation
issues attached to it. It will help you a lot to keep using just a single method
of deployment and Windows Installer2.0 is not a bad choice to do so.
The XCOPY example is merely used as to imply that .NET applications
are no longer plagued with the hassles of checking for the proper DLL ver-
sion, using RegSvr32 to get your files registered, fixing CLSID problems and
all these other annoyances. On the other hand, you’re not out of the woods
right now! All these problems still apply dealing with the .NET Framework
runtime system and when there become more versions of this runtime system
available you may have to deal with all the problems all over again, because
www.syngress.com
Frequently Asked Questions
The following Frequently Asked Questions, answered by the authors of this book,
are designed to both measure your understanding of the concepts presented in 
this chapter and to assist you with real-life implementation of these concepts. To
have  your  questions  about  this  chapter  answered  by  the  author,  browse  to
www.syngress.com/solutions and click on the “Ask the Author” form.
C# TIFF: How to Reorder, Rearrange & Sort TIFF Pages Using C# Code
C# users to reorder and rearrange multi-page Tiff file Tiff image management library, you can easily change and move pages or make a totally new order for all
rearrange pages in pdf file; change page order in pdf reader
VB.NET PDF Password Library: add, remove, edit PDF file password
On this page, we will illustrate how to protect PDF document via password by using Change PDF original password. VB.NET: Necessary DLLs for PDF Password Edit.
rearrange pages in pdf online; rearrange pdf pages in preview
Application Deployment • Chapter 13
643
application may need a specific runtime version to run in. If Microsoft is not
able to make it possible to run different CLRs next to each other and indepen-
dent from each other, we may have to deal with all the issues all over again.
Q:
What is the best way to deploy a localized application?
A:
The best part of localization and the .NET Framework is that it uses the sys-
tems “Regional Options” to determine the “Culture”, in which the culture is
a combination of language (two lowercase characters) and country/region
(two uppercase characters). Compilation of .NET applications is language
independent and no longer poses the same localization problems. Because
culture is part of the assembly’s full name, assemblies with a culture set always
take precedent over assemblies that have no culture, called neutral.The
Culture property at least has to hold the language, but you are advised always
to be as specific as possible.This may help you to deploy your application in
as many localization settings as possible, without having to replace files later
on. Although the .NET Framework helps you a lot with easy localization
implementation, it is the program’s design and development that decides to
what extent your application is able to handle localization. For example,
address labels have another format in about every country.The .NET
Framework will not help you to solve that problem—that’s up to the pro-
gram. But if you create your code so that it can format an address label based
on a set of rules, you can save these rules as a resource in a localized assembly.
Your code just has to read the rules, because the CLR takes care that the
assembly with the proper localization is presented to the application.
Besides setting the culture of the assembly, put the culture in the name of
the resource (for example, Graphic.en-US.resources) because the CLR will
use this to determine the proper localized resource in case the Culture prop-
erty is not set.The last thing you should do is place all resources of the same
culture in a subdirectory that should be located directly under the applica-
tion’s root directory and must be named with the exact culture’s name.The
CLR will check this directory to locate the proper localized resource. If you
adhere to these things, adding a new language to your application is as easy as
copying a directory.
www.syngress.com
644
Chapter 13 • Application Deployment
Q:
How do I transfer an image file to a resource file? Using resgen.exe doesn’t
work.
A:
This seems to be a odd problem:You need to use resgen.exe to create a
resource file, only it excepts just two different formats— TXT files and
RESX files.The latter is an XMLized version of a resource. In fact, it is
advised to convert every resource into its XML-coded version.The reason is
that the whole .NET Framework is optimized in using XML-based input.
You can use streams to take care of all the formatting and stuff.That leads to
the problem that resgen is not able to convert an image to a RESX file. Let’s
hope that Microsoft comes up with a more versatile resgen that can handle
more types of input. Until then, you can use a program called ResXGen with
the C source included that is able to do the trick.You can find it in the sam-
ples section, under tutorials\resourcesandlocalization, of the Framework SDK.
You can use this .NET program or let the source help you to create your
own conversion program.After you have run your image file through this
program, you have the XMLized (RESX) version of your image that can be
converted to a resource file using Resgen.exe.
Q:
Is there a method to use version numbers for assemblies?
A:
There is no standard method of keeping track of version numbers. But
because the format of the version number is very clear, you have to go with
that.As long as you go with that format, you are in the clear. Change version
numbers only if it is really necessary.The reason is very simple:The CLR
considers every version number as a valid assembly and will check it as it tries
to find the correct version of an assembly.The more assemblies there are to
check, the longer this will take. For example:You have built a reasonably
extensive application, and you are now on version 2.0 (the major and minor
part of the version number) and want to change it to 2.1. But because you’ve
done a great deal in the development process, only half of the assemblies have
changed. If you would change the version number of all assemblies, you
double the number of assemblies while half of them are the same. Only by
removing the obsolete ones can you control the number of active assemblies.
This is no problem if the assemblies are used only by your own application,
but if you share the assemblies with other programs, this is not so straightfor-
ward.There are ways around it.The best way is to edit the application config-
uration file and put a <assemblyredirect> in for all the unchanged assemblies
and let the old versions point to the new one. Be careful with using publisher
www.syngress.com
Application Deployment • Chapter 13
645
policies to take control of these issues. Applications can run in Safe Mode,
thereby ignoring the publisher policy.As far as the build and revision goes,
change these only on a per-assembly basis.
There is another way of dealing with a lot of assemblies with version
changes by going for a select number of large assemblies, instead of with a 
lot of small ones.This makes good sense if you can group a lot of code based
on a common functionality in relation to deploying such functionality. Be
sure that it has a limited number of exposed interfaces, or you will run into
version trouble again if the assembly is referenced all over the place.
www.syngress.com
Documents you may be interested
Documents you may be interested