ClickOnce使用体会
由于很少写Winform的程序,所以net2.0发布后,对于ClickOnce这个新特性,一直只是听说过没用过。直到最近有个小程序使用winform开发,使用了Clickonce的发布方式,发现它远没有想象中好用。因此写下自己的一些心得,希望对没用过的人有点帮助。
一、ClickOnce的几个缺点:
1,没有单独的项目类型。
在“安装和部署”中没有这个项目类型,所以不能单见一个项目,只能在项目属性页的“发布”选项卡中使用,或者在项目节点的邮件菜单中直接启动向导使用。使用起来很不习惯。
2,可控制性太差。
尤其是包含的文件的下载状态,只有下载或不下载(需要时可以在程序中下载)。而且下载后的目录位置由FrameWork控制(在当前用户的目录中新添加了一个Apps目录Documents and Settings\Administrator\Local Settings\Apps),目录名是一大串,而且很多个目录,让人摸不着头脑,不知道这些目录的作用。
3,数据文件的位置很离奇。
如果程序中包含数据库文件,并且设置类型为数据文件,那么用户安装后的数据库文件被放到和程序不同的另外一个目录中,所以一定要注意这点。这将造成程序的不同分发方式,数据目录的位置是不同的,感觉很别扭。
4,数据文件的分发策略。
在ClickOnce的发布程序组选项中,有“数据文件”这一类型,可是我觉得微软的分发策略有问题,除了“自动将老版本的数据文件复制到新版本程序的数据目录中”这一特性外,其他的设定和别的文件类型一样,也就是说,如果地发布版本中的数据文件有变化,那么会自动下载并覆盖用户使用中的数据库文件,这对于涉及用户输入的程序来说简直是不可接受的!
5,发布的程序竟然不压缩!
这是我认为的ClickOnce发布中的最大缺点,发布的程序文件竟然不压缩,不打包,这对于大的程序来说简直是灾难,尤其国内的网络环境这麽差。另外,发布的文件是否添加“deploy”扩展名这个没用的设置竟然允许用户选择,简直很可笑,如果不加扩展名只会造成有些特殊的文件类型不能下载!
以上就是我发现我认为的几个缺点,很有可能是我使用的有问题,希望有达人斧正。
二、我总结的注意事项和小技巧:
1,数据库文件的目录。
我想大多数的应用程序都是离不开数据库的,对于.net的程序来说,Access的MDB或者SqlExpress数据库是我的选择。这里不得不说一下|DataDirectory|这个东东,详细请看我的另一随笔使用|DataDirectory| 的烦恼。现在发现在Winform程序中,尤其是要使用ClickOnce发布方式,你的数据目录千万不能叫做“App_Data”,这是正是因为ClickOnce发布的文件不打包,目录结构也是原样设置的,而“App_data”在IIS中是个犯忌的目录名字,目录下的文件不论什么权限都是不能下载的!我可是试验了多次才醒悟的!
2,数据文件的分发。
由于上面提到的ClickOnce分发数据文件的缺陷,我设想了两种解决方案:由于微软设置是如果是数据文件,那末只能输入"必需"的文件组,所以两种方案中数据库文件都不能设置为数据文件,而是将类型设置为"包括".
第一种方案,为数据库文件建立一个单独的组,这样自动安装的时候就不会下载安装数据文件,可以在程序启动后,判断是否第一次运行,由于deploy.IsFirstRun的值,每次升级后也是True,所以还要判断一下数据目录中是否有文件(因为第一次下载数据文件后并存放到数据目录后,以后升级程序后,Framework会自动将旧的数据文件拷贝到新办程序的数据目录中).如果需要下载,那么就调用ApplicationDeployment.CurrentDeployment.DownloadFileGroup("Database");下载数据文件,下载完成后移动到数据目录中.
第二种方案,考虑有可能是通过光盘进行分发,所以是把数据文件设置为"必需"组,然后经过上面同样的判断,然后确定是把数据文件移动到数据目录还是删除.
目前我采用了第二种方案,不过由于ClickOnce分发不压缩打包,而数据库文件又比较大,所以每次升级都包括数据库文件有点浪费.
以上就是我使用ClickOnce的一点儿体会,欢迎大家拍砖.~_~
一、ClickOnce的几个缺点:
1,没有单独的项目类型。
在“安装和部署”中没有这个项目类型,所以不能单见一个项目,只能在项目属性页的“发布”选项卡中使用,或者在项目节点的邮件菜单中直接启动向导使用。使用起来很不习惯。
2,可控制性太差。
尤其是包含的文件的下载状态,只有下载或不下载(需要时可以在程序中下载)。而且下载后的目录位置由FrameWork控制(在当前用户的目录中新添加了一个Apps目录Documents and Settings\Administrator\Local Settings\Apps),目录名是一大串,而且很多个目录,让人摸不着头脑,不知道这些目录的作用。
3,数据文件的位置很离奇。
如果程序中包含数据库文件,并且设置类型为数据文件,那么用户安装后的数据库文件被放到和程序不同的另外一个目录中,所以一定要注意这点。这将造成程序的不同分发方式,数据目录的位置是不同的,感觉很别扭。
4,数据文件的分发策略。
在ClickOnce的发布程序组选项中,有“数据文件”这一类型,可是我觉得微软的分发策略有问题,除了“自动将老版本的数据文件复制到新版本程序的数据目录中”这一特性外,其他的设定和别的文件类型一样,也就是说,如果地发布版本中的数据文件有变化,那么会自动下载并覆盖用户使用中的数据库文件,这对于涉及用户输入的程序来说简直是不可接受的!
5,发布的程序竟然不压缩!
这是我认为的ClickOnce发布中的最大缺点,发布的程序文件竟然不压缩,不打包,这对于大的程序来说简直是灾难,尤其国内的网络环境这麽差。另外,发布的文件是否添加“deploy”扩展名这个没用的设置竟然允许用户选择,简直很可笑,如果不加扩展名只会造成有些特殊的文件类型不能下载!
以上就是我发现我认为的几个缺点,很有可能是我使用的有问题,希望有达人斧正。
二、我总结的注意事项和小技巧:
1,数据库文件的目录。
我想大多数的应用程序都是离不开数据库的,对于.net的程序来说,Access的MDB或者SqlExpress数据库是我的选择。这里不得不说一下|DataDirectory|这个东东,详细请看我的另一随笔使用|DataDirectory| 的烦恼。现在发现在Winform程序中,尤其是要使用ClickOnce发布方式,你的数据目录千万不能叫做“App_Data”,这是正是因为ClickOnce发布的文件不打包,目录结构也是原样设置的,而“App_data”在IIS中是个犯忌的目录名字,目录下的文件不论什么权限都是不能下载的!我可是试验了多次才醒悟的!
2,数据文件的分发。
由于上面提到的ClickOnce分发数据文件的缺陷,我设想了两种解决方案:由于微软设置是如果是数据文件,那末只能输入"必需"的文件组,所以两种方案中数据库文件都不能设置为数据文件,而是将类型设置为"包括".
第一种方案,为数据库文件建立一个单独的组,这样自动安装的时候就不会下载安装数据文件,可以在程序启动后,判断是否第一次运行,由于deploy.IsFirstRun的值,每次升级后也是True,所以还要判断一下数据目录中是否有文件(因为第一次下载数据文件后并存放到数据目录后,以后升级程序后,Framework会自动将旧的数据文件拷贝到新办程序的数据目录中).如果需要下载,那么就调用ApplicationDeployment.CurrentDeployment.DownloadFileGroup("Database");下载数据文件,下载完成后移动到数据目录中.
第二种方案,考虑有可能是通过光盘进行分发,所以是把数据文件设置为"必需"组,然后经过上面同样的判断,然后确定是把数据文件移动到数据目录还是删除.
目前我采用了第二种方案,不过由于ClickOnce分发不压缩打包,而数据库文件又比较大,所以每次升级都包括数据库文件有点浪费.
以上就是我使用ClickOnce的一点儿体会,欢迎大家拍砖.~_~