C# 创建安装程序Word文档格式.docx
《C# 创建安装程序Word文档格式.docx》由会员分享,可在线阅读,更多相关《C# 创建安装程序Word文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
这里不像webApplication那样有那么多的选项,只有内容文件,点击确定后生成,安装后是源文件,没有编译(原因尚不清楚)……这不行吧?
如果在用户机上没法编译,那这网站就跑不起来了。
在安装中你会发现下面这样的情况
看下标记的,全是setup,安装别的程序的时候都是显示的程序名或者公司信息之类,还有默认路径怎么是这样的呢?
这个这么改?
呵呵,切换回VS,然后选中setup项目,点击属性窗口
是那个红色的属性,不是右键属性,不一样的。
把这几个改改就好了,而且可以改别的,像“Description”的……
这样制作的安装包总感觉少点什么东西,用户安装之后还得自己去装数据库,改web.config文件。
仔细想想,感觉这个安装包就是个解压缩,它就是把编译好的文件拷贝了一份,有些活还得额外做,能不能在安装的时候把数据库建了。
O(∩_∩)O这个是可以的……
现在就说怎么把数据库给封进去,在解决方案上“新建项目”,选择“类库”,
把默认生成的class1.cs删除,新建“安装程序类”,
具体代码先不说,一会在说
在setup项目上,在添加个“视图”――“用户界面”,添加个对话框,这次选择“文本A”,之后在文本框A上右键――“属性窗口”,修改某些字段
标记的那几个名字是以后要用的“变量名”,根据自己的需要设置,这个是很灵活的,只是我这个对话框的目的就是获取跟数据库有关的数据,所以就这么写了。
这个界面跟写程序时用的控件的属性界面是一样的,做测试属性名,右侧是值。
其中带有Label就是让用户看的,而带有Property是以后在写代码的时候要用到的,这先做个记号,待会还得看上面那个图。
接下来在setup项目中“视图”——“自定义操作”
在自定义操作界面,选择“安装”,右键“添加自定义操作”,在弹出的窗口中双击“应用程序文件夹”,然后选择“添加输出”,在“项目”中选择“InstallClassLibruary”这个类库项目,之后选择“主输出”和“内容文件”,这样在“自定义操作界面”就多了个内容,
在那个多出来的项上右键选择属性,在CustomAction中填上
/dbname=[DBNAME]
/server=[SERVER]
/user=[UNAME]
/pwd=[PWD]
/targetdir="
[TARGETDIR]"
最后一个带有“"
"
”注意,“[]”中间的是刚在文本框A的属性中带有Property那几项填写的的那几个,而这些“/”之后的则是在写程序中要用的,就是为了获取文本框中输入的值,targetdir是文件的安装路径,需要单独再加个双引号,这个是很有用的;
之后就到刚才建立的那个“安装程序类”里写代码了,看代码
Code
///
<
summary>
添加数据
/summary>
param
name="
DataBaseName"
>
/param>
Sql"
private
void
ExecuteSql(string
DataBaseName,
string
Sql)
{
SqlConnection
sqlConnection
=
new
SqlConnection("
Data
Source="
+
this.Context.Parameters["
server"
]
+
;
Initial
Catalog=master;
Persist
Security
Info=True;
User
ID="
user"
Password="
pwd"
);
System.Data.SqlClient.SqlCommand
Command
System.Data.SqlClient.SqlCommand(Sql,
sqlConnection);
Command.Connection.Open();
Command.Connection.ChangeDatabase(DataBaseName);
try
Command.ExecuteNonQuery();
}
catch
finally
Command.Connection.Close();
创建数据库
strDBName"
protected
AddDBTable(string
strDBName)
{
try
ExecuteSql("
master"
"
CREATE
DATABASE
strDBName);
}
catch(Exception
ee)
MessageBox.Show("
数据库创建失败!
您可以手动添加,但名称需要和刚才填写的数据库名称一致!
错误信息:
\n"
ee.Message,"
Error"
MessageBoxButtons.AbortRetryIgnore,
MessageBoxIcon.Error,
MessageBoxDefaultButton.Button1,
0);
}
这个是新建数据库(注意只有数据库,没有表啊,间表得自己写),就是一般的方法,但仅仅这样是不行的,它没法执行,加上这个
public
override
Install(System.Collections.IDictionary
stateSaver)
base.Install(stateSaver);
AddDBTable(this.Context.Parameters["
dbname"
]);
//
updateWebConfig();
CreateVirtualDir();
这就可以执行了,把这个方法写到Install()里……
注意publicoverridevoidInstall(IDictionarystateSaver)这个,需要重写这个类,然后把你要执行的代码放在这个方法里,比方说
建立数据库,同时得修改Web.config文件吧,再写个修改web.config的方法,也放到Install里,就可以执行了。
注意到这个类中有“this.Context.Parameters["
]”的,这个就是刚才在自定义操作的“CustomAction”属性中那个字段,这样就可以把用户输入的信息获取到了。
回忆一下啊
第一:
“添加用户界面”,选择文本框,
第二:
为文本框中的带label和带property的字段赋值(如property为UNAME),
第三:
“自定义操作”,在属性窗口的“CustomAction”再次传递参数,如“/name=[UNAME]”,
第四:
在自定义操作类中,获取这个参数,如“this.Context.Parameters["
name"
]”,这样就可以在类中使用用户输入的数据了。
再附上两个方法,这个是修改web.config文件的(其实就是读取xml文件,然后修改一个节点的属性,需要添加命名空间System.XML)
updateWebConfig()
//加载配置文件
System.IO.FileInfo
FileInfo
System.IO.FileInfo(this.Context.Parameters["
targetdir"
/web.config"
if
(!
FileInfo.Exists)
throw
InstallException("
缺少配置文件
:
System.Xml.XmlDocument
xmlDocument
System.Xml.XmlDocument();
xmlDocument.Load(FileInfo.FullName);
//修改连接字符串
foreach
(System.Xml.XmlNode
Node
in
xmlDocument["
configuration"
]["
connectionStrings"
])
(Node.Name
==
add"
)
(Node.Attributes.GetNamedItem("
).Value
你在项目中使用的连接数据库字符串的名字"
Node.Attributes.GetNamedItem("
connectionString"
String.Format("
Source={0};
Catalog={1};
ID={2};
Password={3};
dserver,
dbname,
user,
pwd);
xmlDocument.Save(FileInfo.FullName);
Web.config
配置错误!
安装提示"
还有个生成虚拟目录的(先添加引用System.DirectoryServices,然后添加命名空间)
CreateVirtualDir()
constIISWebSiteRoot
IIS:
//"
iis
/W3SVC/1/ROOT"
DirectoryEntry
root
DirectoryEntry(constIISWebSiteRoot);
//判断虚拟目录是否已存在,存在就先删除再创建【不建议这么做,建议直接报个错就行】
Exist
root.Children.Find(virtualdir,
root.SchemaClassName);
(Exist
!
null)
//删除虚拟目录
root.Children.Remove(Exist);
root.CommitChanges();
newRoot
root.Children.Add(virtualdir,
newRoot.Properties["
Path"
][0]
physicaldir;
//设置物理地址
AppIsolated"
2;
值
0
表示应用程序在进程内运行,值
1
表示进程外,值
2
表示进程池
AccessScript"
true;
可执行脚本
newRoot.Invoke("
AppCreate"
true);
//tbEntry.Properties["
DefaultDoc"
Default.aspx"
//设置起始页
AppFriendlyName"
virtualdir;
应用程序名
newRoot.CommitChanges();
虚拟目录创建失败!
再次生成看看,安装时就可以看到输入框了,数据库的数据也是有效的了……
这两段代码均是参考
这里只是简单说了一下,还有些功能就没提,像修改注册表了(c/s用的比较多),添加桌面快捷方式,添加到快速启动栏等等,这些自己都去试试,对着那些项点击右键看看都有什么,都是什么,多摸索摸索……
最后再给个链接:
介绍了3种把数据库附件到安装程序里的,务必试试,刚我给的代码中只是见了个空库,没有表……
---------2009-10-29-----
对创建虚拟目录的代码加以修改,主要原因是按照原先的代码发布后,IIS中ASP.NET的版本是1.1.4322,这样是无法访问的,需要改成2.0.50727,在网上搜索之后,用”ASP.NETIIS注册工具“可以实现,下面就多加了修改的代码(搜到网上的还是1.1的,后来改成2.0的了)
创建虚拟目录
IISServer"
start"
no"
Di