Click here to Skip to main content
15,860,972 members
Articles / Web Development / ASP.NET
Article

Modifying Web.Config During Installation

Rate me:
Please Sign up or sign in to vote.
4.59/5 (19 votes)
26 Jan 20062 min read 150.9K   935   77   31
How to modify the Web.Config of a WebService during installation.

Image 1

Abstract

This application illustrates an installer that changes the values in a webservice's web.config file during setup, according to user entry. The application changes values of key values in the web.config file.

Explanation

As web.config is a configuration file for ASP.NET applications or ASP.NET web service applications to store data, it can be modified by the user after application setup using Notepad or programmatically. Most programmers use web.config as it stored data that can be changed dynamically by the user.

XML
<appSettings>
  <add key="Name"  value="Keyvalue"/>
</appSettings>

A user might have to open and change this file many times if a web application or service is moved from one server to another frequently, so in the installer I've enabled a facility for a user to change the values of attributes of his choice.

My example in this application changes the connection string used by a web service.

XML
<appSettings>
  <add key="Main.ConnectionString" 
        value="server=(local);database=DatabaseName;
               User ID=sa;Password=;
               trusted_connection=false"/>
</appSettings>

So in the installer, I change the key value by implementing the installer class in a webservice project.

Image 2

Image 3

Then in the installer class, I override the Install function:

C#
public override void Install(IDictionary stateSaver)
{
    //You type here your own code
    CreateConnectionString();
    base.Install (stateSaver);
}

To get data required to change the values in web.config from the user, I add in the setup project, a custom action:

Image 4

I the change custom data property for it to:

/Server=[EDITA1]@/Username=
      [EDITA2]@/Password=[EDITA3]@/Folder=[EDITA4]

[EDITA1], [EDITA2], [EDITA3], [EDITA4] are names of textboxes in the dialog added in the setup project interface.

Image 5

You will notice the value here:

/Server=[EDITA1]@/Username=[EDITA2]@/Password=[EDITA3]@/Folder=[EDITA4]

I've separated the parameters to the Installer class by a special letter (@) to split them later as Visual Studio concatenates all the parameters to the first parameter and empty others.

C#
void FormateParamters()
{
    string strServer,strUser , strPassword ,strFolder;
    EventLog.WriteEntry("TNT", Context.Parameters["Server"]);

    strServer=Context.Parameters["Server"].Split('@')[0];
    strUser=Context.Parameters["Server"].Split('@')[1];
    strPassword=Context.Parameters["Server"].Split('@')[2];
    strFolder=Context.Parameters["Server"].Split('@')[3];

    Context.Parameters["Server"]=strServer;
    Context.Parameters["Username"]=strUser.Split('=')[1];
    EventLog.WriteEntry("user",Context.Parameters["Username"]);

    Context.Parameters["Password"]=strPassword.Split('=')[1];
    EventLog.WriteEntry("Password",Context.Parameters["Password"]);

    Context.Parameters["Folder"]=strFolder.Split('=')[1];
    EventLog.WriteEntry("folder",Context.Parameters["Folder"]);

    EventLog.WriteEntry("Server",Context.Parameters["Server"]);
}

The previous function is to format the parameters by splitting them using the special character (@) so we can use them later for the connection string reconstruction function:

C#
void CreateConnectionString()
{
    FormateParamters();

    Assembly ass=Assembly.GetExecutingAssembly();
    EventLog.WriteEntry ("Web.Config", 
             ass.GetName().Name+".Web.config");

    Stream stmConfig=ass.GetManifestResourceStream(
                   ass.GetName().Name+".Web.config");

    if(!Directory.Exists(Context.Parameters["Folder"]))
        Directory.CreateDirectory(Context.Parameters["Folder"]);

    FileStream stmPhysical=new FileStream(
        Context.Parameters["Folder"]+@"\Web.config",
        FileMode.Create);
    StreamReader srConfig=new StreamReader(stmConfig);
    StreamWriter swConfig=new StreamWriter(stmPhysical);

    string strConfig=srConfig.ReadToEnd();
    stmConfig.Close();
    strConfig=strConfig.Replace("server=(local);database" + 
              "=DatabaseName;User ID=sa;Password=;" + 
              "trusted_connection=false",NewConnection());


    swConfig.Write(strConfig);
    swConfig.Close ();
    stmPhysical.Close();

}

The above function copies the web.config from the physical path and begins to replace the old key value with the new value.

Note: the local folder parameter must be the same path where the webservice is installed in. In this case, it is:

C:\intpub\wwwroot\webtest1\

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
Egypt Egypt
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
Questionvalidation if the values are empty Pin
demouser74321-Dec-19 5:16
demouser74321-Dec-19 5:16 
QuestionWeb.config edit Pin
kaushikpathak18-Oct-13 0:14
kaushikpathak18-Oct-13 0:14 
Questionhow to show the existing values in the textboxes before installation? Pin
Praveen Jeganathan22-Apr-13 0:58
Praveen Jeganathan22-Apr-13 0:58 
GeneralMy vote of 4 Pin
KiweenJain11-Nov-12 21:32
KiweenJain11-Nov-12 21:32 
GeneralCreate Web Service Installer Pin
amns4-May-09 0:58
amns4-May-09 0:58 
GeneralGreat article! Pin
Thomas ST21-Apr-09 3:02
Thomas ST21-Apr-09 3:02 
GeneralPossible better way to acquire web.config path Pin
BillyGoatGruff8-Apr-09 5:22
BillyGoatGruff8-Apr-09 5:22 
GeneralRe: Possible better way to acquire web.config path [modified] Pin
Thomas ST21-Apr-09 2:57
Thomas ST21-Apr-09 2:57 
QuestionModifing the Project for the Installer??? Pin
Ricardo Casquete3-Feb-08 16:16
Ricardo Casquete3-Feb-08 16:16 
Generalproblem in installation Pin
chinni10000719-Sep-07 18:56
chinni10000719-Sep-07 18:56 
GeneralRe: problem in installation Pin
anand.lv16-Jan-09 2:26
anand.lv16-Jan-09 2:26 
GeneralRe: Problems when comments in web.config &lt;!-- Some Comment --> Pin
Amal ElHosseiny29-Mar-07 23:18
Amal ElHosseiny29-Mar-07 23:18 
GeneralRe: Problems when comments in web.config &amp;lt;!-- Some Comment --&gt; Pin
assadhf30-Mar-07 1:11
assadhf30-Mar-07 1:11 
GeneralSuggestion Pin
Syed Murtaza Hussain Rizvi21-Nov-06 23:42
Syed Murtaza Hussain Rizvi21-Nov-06 23:42 
GeneralLocal folder-path Pin
edgecrush3r27-Sep-06 0:46
edgecrush3r27-Sep-06 0:46 
Generalsorry ... broken download Pin
marquito_cuba27-Jul-06 6:18
marquito_cuba27-Jul-06 6:18 
GeneralRe: sorry ... broken download Pin
Amal ElHosseiny30-Jul-06 20:59
Amal ElHosseiny30-Jul-06 20:59 
GeneralUse of EventLog.WriteEntry In this article Pin
Auldrin John Possa22-Feb-06 16:23
Auldrin John Possa22-Feb-06 16:23 
GeneralRe: Use of EventLog.WriteEntry In this article Pin
Amal ElHosseiny3-Mar-06 22:26
Amal ElHosseiny3-Mar-06 22:26 
GeneralVery useful Pin
mosessaur13-Feb-06 3:05
mosessaur13-Feb-06 3:05 
GeneralWeb Application Folder Pin
ash75-Feb-06 23:57
ash75-Feb-06 23:57 
GeneralNice Job Pin
Brent Finney2-Feb-06 8:16
Brent Finney2-Feb-06 8:16 
GeneralProblem Pin
ash72-Feb-06 0:51
ash72-Feb-06 0:51 
GeneralRe: Problem Pin
Amal ElHosseiny2-Feb-06 0:56
Amal ElHosseiny2-Feb-06 0:56 
GeneralRe: Problem Pin
ash72-Feb-06 18:57
ash72-Feb-06 18:57 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.