我用vs2008自带的打包工具打包一个项目,想在安装时,做一个验证序列号的操作,我在自定义用户界面中添加了一个这样的界面,用来接收用户输入的序列号
写了安装程序类,如下
1 using System; 2 using System.Collections; 3 using System.Collections.Generic; 4 using System.ComponentModel; 5 using System.Configuration.Install; 6 using System.Linq; 7 using System.Windows.Forms; 8 using BLL; 9 namespace Install 10 { 11 [RunInstaller(true)] 12 public partial class MyInstaller : Installer 13 { 14 public MyInstaller() 15 { 16 InitializeComponent(); 17 18 } 19 20 protected override void OnAfterInstall(IDictionary savedState) 21 { 22 base.OnAfterInstall(savedState); 23 } 24 public override void Install(IDictionary stateSaver) 25 { 26 base.Install(stateSaver); 27 BLL.SerialBLL bll = new SerialBLL(); 28 string message = Context.Parameters["message"].ToString(); 29 MessageBox.Show(message); 30 if (bll.CheckSerail(message) == true) 31 { 32 MessageBox.Show("激活成功"); 33 34 } 35 else 36 { 37 MessageBox.Show("激活失败"); 38 return; 39 } 40 } 41 protected override void OnBeforeInstall(IDictionary savedState) 42 { 43 44 base.OnBeforeInstall(savedState); 45 46 } 47 public override void Uninstall(IDictionary savedState) 48 { 49 base.Uninstall(savedState); 50 51 } 52 public override void Rollback(IDictionary savedState) 53 { 54 base.Rollback(savedState); 55 } 56 57 58 } 59 }
通过CheckSerail()方法验证用户输入的序列号与我数据库里的用来保存序列号的表中是否匹配,但是在安装的过程中,报了一个 "1001 未将对象引用设置到对象的实例" 的错,可能和SerialBLL 有关,还请各位大神帮忙,在下新手,入行不深,或者有更好的建议可以做出这种效果的话,还请指教,感激不敬!!!!
你这个 BLL.SerialBLL 是在一个独立的程序集文件中吗?
是的,在BLL类库中
@Who Im I?: 应该把验证的代码直接放在MyInstaller中。
@Launcher:那个方法只是一条查询语句
public bool CheckSerail(string SerailName)
{
string sql = string.Format("select 1 from Serial where Sid='{0}'",SerailName);
return dal.CheckSerail(sql);
}
这样
@Launcher: 难道是把连接数据库的方法也写到MyInstaller中?然后这样
public bool CheckSerail(string SerailName)
{
this.SqlConnDb();
string sql = string.Format("select 1 from Serial where Sid='{0}'", SerailName);
SqlCommand cmd = new SqlCommand(sql, conn);
return Convert.ToInt32(cmd.ExecuteScalar()) == 1;
}去验证?
@Who Im I?: 是的,直接写到这里面。
@Launcher: 不行,还是报这个错
@Who Im I?: 你试着attach to process 看看能不能调试安装包程序,如果不能,我是爱莫能助了
@Who Im I?:
http://msdn.microsoft.com/zh-cn/library/d9k65z2d(v=vs.100)
http://www.cnblogs.com/virusswb/archive/2008/07/09/1238819.html
参照这两篇文章,应该是你的自定义操作没有设置正确。
@Launcher: 第一个地址无效了。。。能再给个吗,谢谢
@Who Im I?: http://msdn.microsoft.com/en-us/library/
然后: Development Tools and Languages
然后:Visual Studio 2010
然后:Visual Studio
然后:Application Development in Visual Studio
然后:Deploying Applications and Components
然后:Visual Studio Installer Deployment
然后你再把语言和地区选为中国。
@Launcher: 好吧,点到最后没看见Visual Studio Installer Deployment这个选项。。。
@Who Im I?: 那你直接在bing里搜下 Visual Studio Installer Deployment 吧。
建议这个操作在安装后由软件自身来实现,而不要在安装包里面做。因为安装包一般都是可以被通过软件解压的,你的文件和打包的内容照样可以被拿到。
是吗,可这是BOSS说的,我累个去,快烦死了
@Who Im I?: Boss第一,你还是这样做吧?出了事你也不用负责嘛
@沧海一杰: 呵呵呵,亚历山大啊