关于c# WINDOWS Application 的打包问题!! 在线等待!!

时间:2022-08-29 14:15:20
请问怎么样去打包一个windows application 要求满足以下条件:
1) 当用户安装时要求输入我们授权的识别码
2) 一般的技术人员无法通过比较简单的方法得到中间语言代码或者汇编代码
3) .net frame 自动打包进去(已经解决)
4) 数据库自动安装.
5) 限定未注册用户的使用期限是一个月.

14 个解决方案

#1


没有人顶
自己顶一下咯

#2


有人知道吗?
给个资料看也好哦

#3


1)这个要做到程序里面了,保证使用正版,不能依赖安装。
2)没有办法,中间语音是肯定可以看到的,汇编就更不用说了。使用混淆器只能保证降低Reflector之后的可读性。
3)...
4)如果是本地数据库可以先检测有没有数据库引擎,如果没有,就装一个MSDE,然后可以使用OSQL.exe把库挂上,或者执行脚本生成数据库并填充原始数据。如果是远程数据库,使用OSQL.exe执行脚本。
5)程序中实现。使用强命名,保证验证模块不被修改。

#4


mark

#5


在数据库的安装过程中,无外乎如下几个部分: 
(1) 创建数据库
(2) 创建表
(3) 创建试图或者存储过程
并且这三个部分是有先后顺序的,顺序不能颠倒,但是每个过程中没有顺序关系。在测试过程中我们发现可以在一条语句中创建多个表或者多个存储过程。也就是说,我们可以把执行过程按照上面的顺序执行就行了。并且我们把数据库脚本作为资源文件嵌入,只要调入执行就可以了,这样就达到了简化创建一条条命令的过程。
获得资源文件代码如下:
Assembly Asm=Assembly.GetExecutingAssembly();
StreamReader str;
str=new StreamReader(Asm.GetManifestResourceStream(Asm.GetName().Name+"."+filename))// filename为你需要摘入的资源文件。作为资源文件时,只要把文件导入到您的项目中,并且把生成操作改为嵌入的资源即可。
这里我们是直接获得了该文件的文件流,因此直接把该流中的内容读入即可。
我们可以通过如下操作完成:
(1) 建立一个数据库的链接,创建数据库. 比如: connectionstring=”server=127.0.0.1,uid=sa,pwd=pwd”;
(2) 重新创建一个数据库链接,该链接指向创建的数据库。connectionstring=”server=127.0.0.1,uid=sa,pwd=pwd,database=yourdatabase”;
(3) 在新的链接中执行创建数据表和数据存储过程的代码即可。
需要注意的是:不要在你的脚本中有GO命名,其他命令都可以直接执行。
该方法的好处在于: 可以不要求安装的目标机上有SQL Server,也不存在因为文件路径中有空格的问题而倒是安装程序失败。当然,如果您的数据库为Oracle或者DB2等,您也可以采用类似的方法来实现。

#6


谢谢 snowflute(潇湘) !!! 试试先~~~

TO:  mobydick(敌伯威|我排著队拿著爱的号码牌)
你好:数据库是本地的,还有你能否说清楚
怎么样去用强命名?还没有接触过,愿闻其详.
谢谢!!`

#7


还有:
如果我们要把自己的.NET程序发布到目标机器上,同时我们不确定该目标机器是否已经安装了.NET Framework, 那我们就需要自己设计一段unmanaged代码,来判断目标机器是否安装了.NET Framework, 如果没有,则运行Dotnetfx.exe安装.NET Framework, 然后利用Windows Installer安装自己的程序。
现在那段unmanaged(非托管)代码我在
http://msdn.microsoft.com/downloads/default.asp?URL=/code/sample.asp?url=/msdn-files/027/001/830/msdncompositedoc.xml
这里找不到?请问在那里可以找到,自己写会麻烦吗?

#8


InstallShield X

#9


Setup Factory 能简单的快速的解决你的问题

#10


行吗?
是否已经用过?

#11


mark

#12


这么久还没解决?下面的链接里有如何打包Web程序的,打包Windows程序没有什么不同。
http://winzheng.blog.ccidnet.com/blog/ccid/do_showone/tid_19371.html

关于强命名,MSDN里讲的很详细了。

#13


已经解决!!
都是通过注册表完成的
强命名基本没有用到
还是要感谢大伙~~
为了让后来的人不要那么痛苦,想说点我自己的做法:
1)关于识别码,最简单的是,自己在程序中去做一个算法,用来判断用户输入的识别码是否符合要求
如果符合要求就在注册表的关于自己程序的主键中写入一键值(当然是加密的,而且最好不固定的),然后在读取,判断,符合则运行程序.
2)关于日期的做法基本一样,在安装时候把安装日期写入注册表,在程序中读取系统日期,
当日期差大于30时,不运行程序.

#14


good

#1


没有人顶
自己顶一下咯

#2


有人知道吗?
给个资料看也好哦

#3


1)这个要做到程序里面了,保证使用正版,不能依赖安装。
2)没有办法,中间语音是肯定可以看到的,汇编就更不用说了。使用混淆器只能保证降低Reflector之后的可读性。
3)...
4)如果是本地数据库可以先检测有没有数据库引擎,如果没有,就装一个MSDE,然后可以使用OSQL.exe把库挂上,或者执行脚本生成数据库并填充原始数据。如果是远程数据库,使用OSQL.exe执行脚本。
5)程序中实现。使用强命名,保证验证模块不被修改。

#4


mark

#5


在数据库的安装过程中,无外乎如下几个部分: 
(1) 创建数据库
(2) 创建表
(3) 创建试图或者存储过程
并且这三个部分是有先后顺序的,顺序不能颠倒,但是每个过程中没有顺序关系。在测试过程中我们发现可以在一条语句中创建多个表或者多个存储过程。也就是说,我们可以把执行过程按照上面的顺序执行就行了。并且我们把数据库脚本作为资源文件嵌入,只要调入执行就可以了,这样就达到了简化创建一条条命令的过程。
获得资源文件代码如下:
Assembly Asm=Assembly.GetExecutingAssembly();
StreamReader str;
str=new StreamReader(Asm.GetManifestResourceStream(Asm.GetName().Name+"."+filename))// filename为你需要摘入的资源文件。作为资源文件时,只要把文件导入到您的项目中,并且把生成操作改为嵌入的资源即可。
这里我们是直接获得了该文件的文件流,因此直接把该流中的内容读入即可。
我们可以通过如下操作完成:
(1) 建立一个数据库的链接,创建数据库. 比如: connectionstring=”server=127.0.0.1,uid=sa,pwd=pwd”;
(2) 重新创建一个数据库链接,该链接指向创建的数据库。connectionstring=”server=127.0.0.1,uid=sa,pwd=pwd,database=yourdatabase”;
(3) 在新的链接中执行创建数据表和数据存储过程的代码即可。
需要注意的是:不要在你的脚本中有GO命名,其他命令都可以直接执行。
该方法的好处在于: 可以不要求安装的目标机上有SQL Server,也不存在因为文件路径中有空格的问题而倒是安装程序失败。当然,如果您的数据库为Oracle或者DB2等,您也可以采用类似的方法来实现。

#6


谢谢 snowflute(潇湘) !!! 试试先~~~

TO:  mobydick(敌伯威|我排著队拿著爱的号码牌)
你好:数据库是本地的,还有你能否说清楚
怎么样去用强命名?还没有接触过,愿闻其详.
谢谢!!`

#7


还有:
如果我们要把自己的.NET程序发布到目标机器上,同时我们不确定该目标机器是否已经安装了.NET Framework, 那我们就需要自己设计一段unmanaged代码,来判断目标机器是否安装了.NET Framework, 如果没有,则运行Dotnetfx.exe安装.NET Framework, 然后利用Windows Installer安装自己的程序。
现在那段unmanaged(非托管)代码我在
http://msdn.microsoft.com/downloads/default.asp?URL=/code/sample.asp?url=/msdn-files/027/001/830/msdncompositedoc.xml
这里找不到?请问在那里可以找到,自己写会麻烦吗?

#8


InstallShield X

#9


Setup Factory 能简单的快速的解决你的问题

#10


行吗?
是否已经用过?

#11


mark

#12


这么久还没解决?下面的链接里有如何打包Web程序的,打包Windows程序没有什么不同。
http://winzheng.blog.ccidnet.com/blog/ccid/do_showone/tid_19371.html

关于强命名,MSDN里讲的很详细了。

#13


已经解决!!
都是通过注册表完成的
强命名基本没有用到
还是要感谢大伙~~
为了让后来的人不要那么痛苦,想说点我自己的做法:
1)关于识别码,最简单的是,自己在程序中去做一个算法,用来判断用户输入的识别码是否符合要求
如果符合要求就在注册表的关于自己程序的主键中写入一键值(当然是加密的,而且最好不固定的),然后在读取,判断,符合则运行程序.
2)关于日期的做法基本一样,在安装时候把安装日期写入注册表,在程序中读取系统日期,
当日期差大于30时,不运行程序.

#14


good