469,625 Members | 1,086 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,625 developers. It's quick & easy.

Installer - Custom Textboxes in UI problem

I have added a 'Textboxes (A)' to my UI installer project along with a
custom action to pass the value back to a class I've written to override the
void Install function. As long as the text is very simple everything is
working just fine. I've tested it by writing the string out to a text file
to test it.

However, the trouble comes in when I use the textbox for what I really
intended, a ADO.Net Connection String. The textbox is to allow the user to
put the connection string and I intend to test the db connectivity and write
it to the registry during installation. However, when I enter a real
connection string in the box, it chokes and gives an error -- presumably
because of either the semicolon, space, or equals characters in it. Is
there a list of characters that can't be input? Do I need to escape them
somehow before passing them?

(notice the beginning of the exception message is _PART_ of my connection
string, it's trying to parse that string into multiple context parameters I
think). I get the following error
Exception occured while initializing the installation:
System.ArgumentException: File Source=workstation;Initial does not exist.
If this parameter is used as an installer option, the format must be
/key=[value]..
(OK Button)

Again, everything works when the string is simple, so I'm sure I'm passing
it OK. Just to provide all the info - I've named the Edit1Property to
'CONNSTRING' and the custom action 'CustomActionData' is
/connString=[CONNSTRING]. The exact string I input in the box and
overridden install function is below:

String Input:
Data Source=workstation;Initial Catalog=serverPerformance;User
ID=serverPerformance;Password=server;

My install function:
[RunInstaller(true)]

public class ProjectInstaller : System.Configuration.Install.Installer

{

public override void Install(IDictionary state)

{

string connString = this.Context.Parameters["connString"];

if(connString == "")

{

throw new InstallException("The database conection information is not
optional. Please obtain this information from your system administrator and
run setup again.");

}

System.Data.SqlClient.SqlConnection myConn = new SqlConnection();

try

{

string queryCount = "SELECT count(*) FROM sysobjects WHERE name like
'sample%' AND xtype = 'u'";

myConn = new System.Data.SqlClient.SqlConnection(connString);

System.Data.SqlClient.SqlCommand cmdCount = new
System.Data.SqlClient.SqlCommand(queryCount,myConn );

myConn.Open();

int tableCount = (int) cmdCount.ExecuteScalar();

if (tableCount<2)

{

throw new InstallException("The connection to the database was made
successfully, but the correct database structure doesn't exist. Please use a
different database or refer to the documentation to build the database
structure and then reinstall this service.");

}

}

catch (System.ArgumentException argEx)

{

throw new InstallException("Error validating provided SQL connection string.
Please check your connection string and run setup again.\r\n\r\nError: "
+argEx.Message);

}

catch (System.Data.SqlClient.SqlException sqlEx)

{

throw new InstallException("Error connecting to database and executing a
query to test the database availability and structure. Please check your
connection string and and database server and run setup again.\r\n\r\nError:
" +sqlEx.Message);

}

catch (Exception ex)

{

throw new InstallException("There was an error attempting to validate your
connection string and database structure. Please check your connection
string and database server and run setup again.\r\n\r\nError: "
+ex.Message);

}

finally

{

if (myConn.State != ConnectionState.Closed)

myConn.Close();

}

}

}
Nov 15 '05 #1
1 8070
Nevermind, I found the answer here:
http://msdn.microsoft.com/library/de...taproperty.asp

the syntax for the CustomActionData field when it can contain a space is
this:
/connString="[CONNSTRING]"

"Craig" <cs******@remoovdis.kc.rr.com> wrote in message
news:ei**************@TK2MSFTNGP12.phx.gbl...
I have added a 'Textboxes (A)' to my UI installer project along with a
custom action to pass the value back to a class I've written to override the void Install function. As long as the text is very simple everything is
working just fine. I've tested it by writing the string out to a text file to test it.

However, the trouble comes in when I use the textbox for what I really
intended, a ADO.Net Connection String. The textbox is to allow the user to put the connection string and I intend to test the db connectivity and write it to the registry during installation. However, when I enter a real
connection string in the box, it chokes and gives an error -- presumably
because of either the semicolon, space, or equals characters in it. Is
there a list of characters that can't be input? Do I need to escape them
somehow before passing them?

(notice the beginning of the exception message is _PART_ of my connection
string, it's trying to parse that string into multiple context parameters I think). I get the following error
Exception occured while initializing the installation:
System.ArgumentException: File Source=workstation;Initial does not exist.
If this parameter is used as an installer option, the format must be
/key=[value]..
(OK Button)

Again, everything works when the string is simple, so I'm sure I'm passing
it OK. Just to provide all the info - I've named the Edit1Property to
'CONNSTRING' and the custom action 'CustomActionData' is
/connString=[CONNSTRING]. The exact string I input in the box and
overridden install function is below:

String Input:
Data Source=workstation;Initial Catalog=serverPerformance;User
ID=serverPerformance;Password=server;

My install function:
[RunInstaller(true)]

public class ProjectInstaller : System.Configuration.Install.Installer

{

public override void Install(IDictionary state)

{

string connString = this.Context.Parameters["connString"];

if(connString == "")

{

throw new InstallException("The database conection information is not
optional. Please obtain this information from your system administrator and run setup again.");

}

System.Data.SqlClient.SqlConnection myConn = new SqlConnection();

try

{

string queryCount = "SELECT count(*) FROM sysobjects WHERE name like
'sample%' AND xtype = 'u'";

myConn = new System.Data.SqlClient.SqlConnection(connString);

System.Data.SqlClient.SqlCommand cmdCount = new
System.Data.SqlClient.SqlCommand(queryCount,myConn );

myConn.Open();

int tableCount = (int) cmdCount.ExecuteScalar();

if (tableCount<2)

{

throw new InstallException("The connection to the database was made
successfully, but the correct database structure doesn't exist. Please use a different database or refer to the documentation to build the database
structure and then reinstall this service.");

}

}

catch (System.ArgumentException argEx)

{

throw new InstallException("Error validating provided SQL connection string. Please check your connection string and run setup again.\r\n\r\nError: "
+argEx.Message);

}

catch (System.Data.SqlClient.SqlException sqlEx)

{

throw new InstallException("Error connecting to database and executing a
query to test the database availability and structure. Please check your
connection string and and database server and run setup again.\r\n\r\nError: " +sqlEx.Message);

}

catch (Exception ex)

{

throw new InstallException("There was an error attempting to validate your
connection string and database structure. Please check your connection
string and database server and run setup again.\r\n\r\nError: "
+ex.Message);

}

finally

{

if (myConn.State != ConnectionState.Closed)

myConn.Close();

}

}

}

Nov 15 '05 #2

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

reply views Thread by HPKrekt | last post: by
4 posts views Thread by Bill Murray | last post: by
5 posts views Thread by Arun Bhalla | last post: by
reply views Thread by Arun Bhalla | last post: by
3 posts views Thread by Mark Assousa | last post: by
reply views Thread by gheharukoh7 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.