<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_海洋女神</title><subtitle type="text">天下风云出我辈， 一入江湖岁月催； 皇图霸业谈笑间， 不胜人生一场醉。 提剑跨骑挥鬼雨， 白骨如山鸟惊飞; 尘事如潮人如水， 只叹江湖几人回。</subtitle><id>http://feed.cnblogs.com/blog/u/56397/rss</id><updated>2012-04-24T03:37:58Z</updated><author><name>海洋女神</name><uri>http://www.cnblogs.com/Cindy_weiwei/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Cindy_weiwei/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/56397/rss"/><entry><id>http://www.cnblogs.com/Cindy_weiwei/archive/2012/04/24/2467738.html</id><title type="text">Installshield脚本拷贝文件常见问题汇总</title><summary type="text">很多朋友经常来问：为什么我用CopyFile/XCopyFile函数拷贝文件无效？引起这种情况的原因有很多，今天略微总结了一下，欢迎各位朋友跟帖补充不完善的地方</summary><published>2012-04-24T03:32:00Z</published><updated>2012-04-24T03:32:00Z</updated><author><name>海洋女神</name><uri>http://www.cnblogs.com/Cindy_weiwei/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Cindy_weiwei/archive/2012/04/24/2467738.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Cindy_weiwei/archive/2012/04/24/2467738.html"/><content type="html">&lt;p&gt;很多朋友经常来问：为什么我用CopyFile/XCopyFile函数拷贝文件无效？&lt;br /&gt;引起这种情况的原因有很多，今天略微总结了一下，欢迎各位朋友跟帖补充不完善的地方&lt;br /&gt;1：文件路径错误，比如将CopyFile/XCopyFile脚本放在OnFirstUIBefore里，但是引用的文件路径却是INSTALLDIR/TARGETDIR的，而这时候，安装程序还未将安装文件拷贝至用户安装路径，当然是找不到可拷贝的文件的&lt;br /&gt;调试和解决办法：在任何拷贝之前，用FindFile函数来确定你的文件路径是否正确；有必要时，调整脚本所在位置&lt;/p&gt;&lt;p&gt;2：函数的参数使用错误，比如XCopyFile拷贝全部文件，参数写法是xxx\\*.*，而有的朋友粗心大意想当然地只写了需要拷贝的文件夹的名字，而不用通配符*.*去匹配文件夹之下的所有文件，自然拷贝不成功&lt;br /&gt;调试和解决办法：多读几遍IS自带的函数的example&lt;/p&gt;&lt;p&gt;3：敏感区域的保护措施，常见的有win7, windows server系统，对系统盘的一些敏感区域保护是很严密的，普通权限的操作根本无法将文件拷贝进去&lt;br /&gt;调试和解决办法：试试将函数的拷贝改成普通非系统盘路径是否成功，以便于确定是否是操作系统的保护引起的问题；解决办法，对于windows权限，并没有什么特别好的解决办法，无非是提升安装包的权限，比如在release里把required execute level选为highest available，有时候还需要做一些不太优雅的事情，比如打包完毕后拆包改设置提升权限，参阅&lt;br /&gt;&lt;a href="http://hi.baidu.com/westsky/blog/item/a114f4390bb1cafd3b87ceec.html"&gt;http://hi.baidu.com/westsky/blog/item/a114f4390bb1cafd3b87ceec.html&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Cindy_weiwei/aggbug/2467738.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Cindy_weiwei/archive/2012/04/24/2467738.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Cindy_weiwei/archive/2012/03/15/2398341.html</id><title type="text">Installshield获取安装包版本的系统变量是IFX_PRODUCT_VERSION</title><summary type="text">Installshield获取安装包版本的系统变量为IFX_PRODUCT_VERSION 当笔记记下来，很简单的一个变量，不过IS里查系统变量是让人头大，知道就是知道，不知道查起来查死人</summary><published>2012-03-15T08:55:00Z</published><updated>2012-03-15T08:55:00Z</updated><author><name>海洋女神</name><uri>http://www.cnblogs.com/Cindy_weiwei/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Cindy_weiwei/archive/2012/03/15/2398341.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Cindy_weiwei/archive/2012/03/15/2398341.html"/><content type="html">&lt;p&gt;Installshield获取安装包版本的系统变量为IFX_PRODUCT_VERSION &lt;/p&gt;&lt;p&gt;当笔记记下来，很简单的一个变量，不过IS里查系统变量是让人头大，知道就是知道，不知道查起来查死人&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Cindy_weiwei/aggbug/2398341.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Cindy_weiwei/archive/2012/03/15/2398341.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Cindy_weiwei/archive/2012/03/14/2396258.html</id><title type="text">installshield 32位打包和64位打包的注意事项</title><summary type="text">32/64位问题要把握几点：1. 明确你的产品是否需要区分32/64位2. 明确你的产品中是否有32/64位的服务注册3. 了解InstallShield Build出来的安装包本身是32位应用程序4. 了解Windows 64位系统上的32位路径和64位路径差异以及如何在InstallShield的系统变量中找到对应的内容</summary><published>2012-03-14T09:26:00Z</published><updated>2012-03-14T09:26:00Z</updated><author><name>海洋女神</name><uri>http://www.cnblogs.com/Cindy_weiwei/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Cindy_weiwei/archive/2012/03/14/2396258.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Cindy_weiwei/archive/2012/03/14/2396258.html"/><content type="html">32/64位问题要把握几点：&lt;br /&gt;1. 明确你的产品是否需要区分32/64位&lt;br /&gt;2. 明确你的产品中是否有32/64位的服务注册&lt;br /&gt;3. 了解InstallShield Build出来的安装包本身是32位应用程序&lt;br /&gt;4. 了解Windows 64位系统上的32位路径和64位路径差异以及如何在InstallShield的系统变量中找到对应的内容&lt;img src="http://www.cnblogs.com/Cindy_weiwei/aggbug/2396258.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Cindy_weiwei/archive/2012/03/14/2396258.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Cindy_weiwei/archive/2012/03/14/2396253.html</id><title type="text">Installshield 64位操作系统下拷贝文件，如何重定向到32位的系统文件夹下</title><summary type="text">64位操作系统下拷贝文件重定向问题，在在复制代码前加上Disable(WOW64FSREDIRECTION);就可以解决64位系统默认复制到syswow64的问题但是注意：Disable(WOW64FSREDIRECTION); CopyFile( SUPPORTDIR^"MUCam32.dll", WINSYSDIR^"MUCam32.dll"); 是没有用的，WINSYSDIR64 才可以，WINSYSDIR 依然是32位路径。64位机器上的system32虽然写的是32，但。。。</summary><published>2012-03-14T09:24:00Z</published><updated>2012-03-14T09:24:00Z</updated><author><name>海洋女神</name><uri>http://www.cnblogs.com/Cindy_weiwei/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Cindy_weiwei/archive/2012/03/14/2396253.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Cindy_weiwei/archive/2012/03/14/2396253.html"/><content type="html">&lt;p&gt;64位操作系统下拷贝文件重定向问题，在在复制代码前加上Disable(WOW64FSREDIRECTION);就可以解决64位系统默认复制到syswow64的问题&lt;/p&gt;&lt;p&gt;但是注意：&lt;/p&gt;&lt;p&gt;&amp;nbsp;Disable(WOW64FSREDIRECTION);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CopyFile( SUPPORTDIR^"MUCam32.dll", WINSYSDIR^"MUCam32.dll");&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;p&gt;是没有用的，WINSYSDIR64 才可以，WINSYSDIR 依然是32位路径。&lt;font size="2"&gt;64位机器上的system32虽然写的是32，但。。。&lt;/font&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Cindy_weiwei/aggbug/2396253.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Cindy_weiwei/archive/2012/03/14/2396253.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Cindy_weiwei/archive/2011/09/02/2163971.html</id><title type="text">安装导论--谨以此文与那些徘徊在安装的大门外，并且被花哨的功能所迷惑的朋友们共勉。</title><summary type="text">很多年前的一个秋天的下午，我在上一堂编程课，老师先让我们把编程工具装上。因为很多电脑比较破旧，安装纷纷出了问题，老师看看也来不及讲课了，索性一边帮我们装软件，一边讲起了安装的一些知识。老师问：你们知道安装的本质是什么吗？</summary><published>2011-09-02T08:57:00Z</published><updated>2011-09-02T08:57:00Z</updated><author><name>海洋女神</name><uri>http://www.cnblogs.com/Cindy_weiwei/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Cindy_weiwei/archive/2011/09/02/2163971.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Cindy_weiwei/archive/2011/09/02/2163971.html"/><content type="html">&lt;p&gt;&lt;br /&gt;很多年前的一个秋天的下午，我在上一堂编程课，老师先让我们把编程工具装上。因为很多电脑比较破旧&lt;/p&gt;&lt;p&gt;，安装纷纷出了问题，老师看看也来不及讲课了，索性一边帮我们装软件，一边讲起了安装的一些知识。&lt;br /&gt;老师问：你们知道安装的本质是什么吗？&lt;br /&gt;给出的答案五花八门，有的说是让使用者能用起来的一种方式，有的说是涉及到微机原理了，有的则认为&lt;/p&gt;&lt;p&gt;是让电脑识别你的软件。&lt;br /&gt;老师微微一笑，说道：安装的本质，就是拷贝。&lt;br /&gt;当时的我还处于对电脑原理都不甚了了，装个软件都战战兢兢生怕把系统装出问题来的水平，对这句话，&lt;/p&gt;&lt;p&gt;自然是不理解的，甚至很快就把它淡忘了。&lt;br /&gt;然而多年后，当我有一天接到一个打包软件的任务，在苦苦思索对策的时候，这句话就像划破黑夜的闪电&lt;/p&gt;&lt;p&gt;一样，突然照亮了我的内心---安装的本质，就是拷贝。&lt;br /&gt;是的，你不要感到奇怪，也不要觉得浅薄，更不要迷惑于那些你见过的安装包。那些漂亮的安装界面，那&lt;/p&gt;&lt;p&gt;些神奇的开机自启动，那些方便的配置用户文件，都只是安装的延伸而已；安装的本质，就是将你的文件&lt;/p&gt;&lt;p&gt;，拷贝到用户的电脑上去。就这么简单！&lt;/p&gt;&lt;p&gt;它不会自动帮你捆绑环境。很多朋友，把自己的工程在自己的IDE里编译成功后，就急吼吼的来问：我怎&lt;/p&gt;&lt;p&gt;么样用installshield打包一个安装包，让它能使我的软件在一台没有环境的电脑上运行。每次遇到这样&lt;/p&gt;&lt;p&gt;的问题，我总是很哭笑不得，很想让他去学习一下编译原理。它不会自动替你做任何额外的事情，你吩咐&lt;/p&gt;&lt;p&gt;它做什么，它就做什么，就像一个忠实的英国管家。&lt;br /&gt;它也不会帮你编译工程，请你自己将你的工程编译成jar文件，或者DLL，或者EXE.&lt;/p&gt;&lt;p&gt;所以，如果你是一个初学者，想要做一个花哨的安装包，请切记安装的本质就是拷贝，。你需要先做出一&lt;/p&gt;&lt;p&gt;个最简单的安装包，它的功能就只有将你的文件忠实地拷贝到一台电脑上。只有当你试验成功了这一步，&lt;/p&gt;&lt;p&gt;你才能继续迈进---捆绑环境、配置文件、创建数据库、创建快捷方式等等。&lt;/p&gt;&lt;p&gt;谨以此文与那些徘徊在安装的大门外，并且被花哨的功能所迷惑的朋友们共勉。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Cindy_weiwei/aggbug/2163971.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Cindy_weiwei/archive/2011/09/02/2163971.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Cindy_weiwei/archive/2011/07/24/2115416.html</id><title type="text">一个简单的带序列号输入的安装包</title><summary type="text">首先建立一个Installscript Project在Installation Designer中，找到Behavior and Logic -&gt; Install Script, 在Setup.rul中找到Before Move Data -&gt; OnFirstUIBefore，找到Dlg_SdRegisterUser标签中一： 用nResult = SdCustomerInformationEx(szTitle,szName,szCompany,svSerial,bvAllUser);这行去代替nResult = SdRegisterUser( szTitle, szMsg, s</summary><published>2011-07-24T07:37:00Z</published><updated>2011-07-24T07:37:00Z</updated><author><name>海洋女神</name><uri>http://www.cnblogs.com/Cindy_weiwei/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Cindy_weiwei/archive/2011/07/24/2115416.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Cindy_weiwei/archive/2011/07/24/2115416.html"/><content type="html">&lt;p&gt;首先建立一个Installscript Project&lt;/p&gt;&lt;p&gt;在Installation Designer中，找到Behavior and Logic -&amp;gt; Install Script, 在Setup.rul中找到Before Move Data -&amp;gt; OnFirstUIBefore，找到Dlg_SdRegisterUser标签中&lt;/p&gt;&lt;p&gt;一： &lt;/p&gt;&lt;p&gt;用&amp;nbsp;nResult = SdCustomerInformationEx(szTitle,szName,szCompany,svSerial,bvAllUser);&lt;/p&gt;&lt;p&gt;这行去代替nResult = SdRegisterUser( szTitle, szMsg, szName, szCompany ); &lt;/p&gt;&lt;p&gt;（用到的新变量请自行定义， STRING svSerial; BOOL bvAllUser;)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;二： &lt;/p&gt;&lt;p&gt;用&lt;/p&gt;&lt;p&gt;&amp;nbsp;if(svSerial='1234123412341234')&amp;nbsp;&amp;nbsp;&amp;nbsp; then&amp;nbsp; goto Dlg_SetupType2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(nResult = BACK) then goto Dlg_SdLicense2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox("Wrong Serial Number!", SEVERE);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; goto Dlg_SdRegisterUser;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; endif;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; endif;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;p&gt;这段去代替if(nResult = BACK) then goto Dlg_SdLicense2;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;编译之，一个简单的带序列号输入的安装包就做好了。这里序列号验证简单处理为'1234123412341234'，实际应用中，可以使用更复杂的算法，可以直接将算法写在IS函数里，也可以用C++或C#编译成DLL来进行密码验证。&lt;/p&gt;&lt;p&gt;IS调用DLL可以参阅&lt;a href="http://hi.baidu.com/javalang/blog/item/84ebbbde7f51a05dcdbf1adf.html"&gt;http://hi.baidu.com/javalang/blog/item/84ebbbde7f51a05dcdbf1adf.html&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Cindy_weiwei/aggbug/2115416.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Cindy_weiwei/archive/2011/07/24/2115416.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Cindy_weiwei/archive/2011/02/22/1961244.html</id><title type="text">How to:installshield安装包怎样才能出现选择路径的界面？</title><summary type="text">这个问题新手问的很多，installshield的安装包默认设置下选择路径的界面藏在Custom安装类型下。在做完安装包后，点击执行，正常选择“下一步”“下一步”，来到Setup Type界面选择Custom类型，点击Next，就会出现选择路径的界面了。</summary><published>2011-02-22T06:03:00Z</published><updated>2011-02-22T06:03:00Z</updated><author><name>海洋女神</name><uri>http://www.cnblogs.com/Cindy_weiwei/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Cindy_weiwei/archive/2011/02/22/1961244.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Cindy_weiwei/archive/2011/02/22/1961244.html"/><content type="html">&lt;p&gt;这个问题新手问的很多，installshield的安装包默认设置下选择路径的界面藏在Custom安装类型下。在做完安装包后，点击执行，正常选择&amp;#8220;下一步&amp;#8221;&amp;#8220;下一步&amp;#8221;，来到Setup Type界面&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/cindy_weiwei/test.JPG" width="499" height="382" /&gt;&lt;/p&gt;&lt;p&gt;选择Custom类型，点击Next，就会出现选择路径的界面了。&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/cindy_weiwei/test2.JPG" width="503" height="383" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Cindy_weiwei/aggbug/1961244.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Cindy_weiwei/archive/2011/02/22/1961244.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Cindy_weiwei/archive/2011/01/25/1944739.html</id><title type="text">installshield零碎知识点集锦</title><summary type="text">是一些平时搜集的小知识点，都是网友解决某个小问题时候的一些小代码之类的，搜集起来，以备不时之需installshield 64位操作系统重定向installshield 64位操作注册表设置installshield 安装字体installshield 操作64位进程installshield 写pathinstallshield,disable一个控件Installshield操作注册表UACinstallshield创建文件夹快捷方式installshield发送消息停止强制重启动installshield关于再次分发的安装包installshield管理员身份注册表installshie</summary><published>2011-01-25T08:46:00Z</published><updated>2011-01-25T08:46:00Z</updated><author><name>海洋女神</name><uri>http://www.cnblogs.com/Cindy_weiwei/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Cindy_weiwei/archive/2011/01/25/1944739.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Cindy_weiwei/archive/2011/01/25/1944739.html"/><content type="html">&lt;p&gt;是一些平时搜集的小知识点，都是网友解决某个小问题时候的一些小代码之类的，搜集起来，以备不时之需&lt;/p&gt;&lt;p&gt;installshield 64位操作系统重定向&lt;br /&gt;installshield 64位操作注册表设置&lt;br /&gt;installshield 安装字体&lt;br /&gt;installshield 操作64位进程&lt;br /&gt;installshield 写path&lt;br /&gt;installshield,disable一个控件&lt;br /&gt;Installshield操作注册表UAC&lt;br /&gt;installshield创建文件夹快捷方式&lt;br /&gt;installshield发送消息停止强制重启动&lt;br /&gt;installshield关于再次分发的安装包&lt;br /&gt;installshield管理员身份注册表&lt;br /&gt;installshield建立ie快捷方式，不显示当前拷贝文件&lt;br /&gt;installshield界面的一些文字修改&lt;br /&gt;installshield杀进程.jpg&lt;br /&gt;installshield删除库及attatch方式建库脚本&lt;br /&gt;installshield升级包补丁包&lt;br /&gt;installshield添加文件夹时不能弹出提示对话框的解决方法&lt;br /&gt;installshield卸载刷新注册表&lt;br /&gt;installshield修改目录权限&lt;br /&gt;Installshield在安装结束时刷新系统&lt;br /&gt;installshield重启动后继续安装的想法探讨&lt;br /&gt;installshield组件单独指定路径&lt;br /&gt;installshield做网页快捷方式&lt;br /&gt;IS2009制作Oracle静默安装包&lt;br /&gt;ISWiProject Object(vbs)修改Installshield工程版本号&lt;br /&gt;IS打升级包&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/Cindy_weiwei/installshield零碎知识点集锦.zip"&gt;/Files/Cindy_weiwei/installshield零碎知识点集锦.zip&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Cindy_weiwei/aggbug/1944739.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Cindy_weiwei/archive/2011/01/25/1944739.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Cindy_weiwei/archive/2011/01/25/1944603.html</id><title type="text">Installshield关于.NET安装时需要重启动的处理办法，以及延伸出的重启后继续安装的安装包的一点想法</title><summary type="text">很多朋友做安装包的时候，所打包的软件需要.NET Framework之类的环境，他们会检测系统是否已经安装了.NET，如果没有，则调用.NET安装包来安装。但是.NET安装完是需要重启动的，一般来说，我们都推荐使用/q/norestart的静默安装函数来使重启动推迟到安装结束时，使用如下：LaunchAppAndWait(SUPPORTDIR^"dotNetFx40_Full_x86_x64.exe","/q /norestart",WAIT);.NET在重启后才能生效，但是如果在安装完.NET之后的安装行为中立刻需要使用.NET特性，那么必须让先电脑重新启动，但是重启后让用户再次点击setu</summary><published>2011-01-25T06:37:00Z</published><updated>2011-01-25T06:37:00Z</updated><author><name>海洋女神</name><uri>http://www.cnblogs.com/Cindy_weiwei/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Cindy_weiwei/archive/2011/01/25/1944603.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Cindy_weiwei/archive/2011/01/25/1944603.html"/><content type="html">很多朋友做安装包的时候，所打包的软件需要.NET Framework之类的环境，他们会检测系统是否已经安装了.NET，如果没有，则调用.NET安装包来安装。但是.NET安装完是需要重启动的，一般来说，我们都推荐使用/q/norestart的静默安装函数来使重启动推迟到安装结束时，使用如下：&lt;br /&gt;LaunchAppAndWait(SUPPORTDIR^"dotNetFx40_Full_x86_x64.exe","/q /norestart",WAIT);&lt;br /&gt;.NET在重启后才能生效，但是如果在安装完.NET之后的安装行为中立刻需要使用.NET特性，那么必须让先电脑重新启动，但是重启后让用户再次点击setup.exe来继续安装是不友好的行为，如果能够在重启后自动调用安装包继续下一步安装，那该多么好啊。&lt;br /&gt;因此我的想法是：将setup.exe的路径写入到&lt;br /&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run&lt;br /&gt;键值下，这样会在你的电脑重启后，自动运行你的setup.exe来继续安装。&lt;br /&gt;记得在安装结束时，写脚本来删除这个键值，不然每次电脑开机都要运行这个setup.exe啦 &lt;img src="http://www.cnblogs.com/Cindy_weiwei/aggbug/1944603.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Cindy_weiwei/archive/2011/01/25/1944603.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Cindy_weiwei/archive/2011/01/20/1940309.html</id><title type="text">打包安装的一些准则之我见--欢迎拍砖欢迎补充</title><summary type="text">从做第一个打包程序到现在，陆陆续续也做了几十个安装包了，也帮助了不少朋友解决他们在制作安装包过程中的问题，也得到了不少朋友们在安装包方面的指导。人之患在好为人师，我也不例外，看得多了也想说两句关于打包方面的自己的想法，放大了说，也可以做到编程的一些参考。欢迎拍砖欢迎跟帖欢迎补充。1.如何入门？Installshield挺难的，资料少，没有中文版，而且做安装包的同仁也少。很多新手进入Q群，第一句话就是：各位大大，我要打包一个安装程序，要自动安装MySQL，初始化数据库，写配置文件，安装完毕还要自动启动一个服务等等，但是我对installshield一窍不通，有人能指点一下么？对这种同学，我一般都</summary><published>2011-01-20T08:23:00Z</published><updated>2011-01-20T08:23:00Z</updated><author><name>海洋女神</name><uri>http://www.cnblogs.com/Cindy_weiwei/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Cindy_weiwei/archive/2011/01/20/1940309.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Cindy_weiwei/archive/2011/01/20/1940309.html"/><content type="html">&lt;p&gt;从做第一个打包程序到现在，陆陆续续也做了几十个安装包了，也帮助了不少朋友解决他们在制作&lt;/p&gt;&lt;p&gt;安装包过程中的问题，也得到了不少朋友们在安装包方面的指导。人之患在好为人师，我也不例外&lt;/p&gt;&lt;p&gt;，看得多了也想说两句关于打包方面的自己的想法，放大了说，也可以做到编程的一些参考。欢迎&lt;/p&gt;&lt;p&gt;拍砖欢迎跟帖欢迎补充。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;1.如何入门？Installshield挺难的，资料少，没有中文版，而且做安装包的同仁也少。很多新手&lt;/p&gt;&lt;p&gt;进入Q群，第一句话就是：各位大大，我要打包一个安装程序，要自动安装MySQL，初始化数据库，&lt;/p&gt;&lt;p&gt;写配置文件，安装完毕还要自动启动一个服务等等，但是我对installshield一窍不通，有人能指&lt;/p&gt;&lt;p&gt;点一下么？对这种同学，我一般都是：哦，抱歉，没有人能手把手教你。是的，如果把打包复杂度&lt;/p&gt;&lt;p&gt;分为I,II,III,IV,V，从低到高的话，这个包的复杂程序在III到IV左右。对于一个连基本操作都没上手&lt;/p&gt;&lt;p&gt;的新手，你谈何做出这样一个复杂的安装包,就算我把函数摆你面前，你会用吗？那么怎么办？从最&lt;/p&gt;&lt;p&gt;简单的入手，找个例子，照葫芦画瓢，做一个没有脚本、没有美化界面、只有安装基本文件的安装&lt;/p&gt;&lt;p&gt;包。如果测试通过，OK，恭喜你入门了，现在可以学脚本了。&lt;br /&gt;基础入门教程网上很多，我也写过一个，你可以参阅&lt;br /&gt;&lt;a href="http://www.cnblogs.com/Cindy_weiwei/archive/2009/05/18/1459542.html"&gt;http://www.cnblogs.com/Cindy_weiwei/archive/2009/05/18/1459542.html&lt;/a&gt;&lt;br /&gt;2.如何调试？出了问题是很头疼的，有些问题可能一眼就能看出来，有些问题是多种错误叠加在一&lt;/p&gt;&lt;p&gt;起造成的。按f5进入调试模式进行单步调试是个好办法；偷懒一点的可以在怀疑出错的地方加上&lt;/p&gt;&lt;p&gt;MessageBox来输出一些信息；如果是很复杂的问题，建议新建一个工程，加一点条件就编译一次，&lt;/p&gt;&lt;p&gt;看看到底问题出在哪一步。&lt;br /&gt;昨天碰到一个案例，有位同学贴了个图，说卸载时候弹出对话框，点否就没反应，问我们怎么回事&lt;/p&gt;&lt;p&gt;。&lt;br /&gt;先问：是从控制面板卸载的吗？&lt;br /&gt;答：不是，是按照你的教程写的完美卸载，怀疑完美卸载有问题。&lt;br /&gt;我说：完美卸载其实只是再次调用了setup.exe，请你先不要用完美卸载，请直接再次运行你的&lt;/p&gt;&lt;p&gt;setup.exe。&lt;br /&gt;答：我要有一个卸载快捷方式的。&lt;br /&gt;我顿时faint了：你不是要找错误吗？&lt;br /&gt;还算比较听话，运行了一次setup.exe，跟我说现象同上，还是出错。&lt;br /&gt;问：你动了OnMaintUIBefore?&lt;br /&gt;答：是的。&lt;br /&gt;这是一个典型的叠加型问题：1，他不能保证他学着写的完美卸载没有问题；2.软件卸载不了了。&lt;/p&gt;&lt;p&gt;那么1.避开完美卸载，直接调出卸载界面；2确认是卸载过程有问题后，很快就能定位出问题所在&lt;/p&gt;&lt;p&gt;了。&lt;/p&gt;&lt;p&gt;3.做个有道德的打包者。谁也不希望自己装个想用的软件，可是这软件在安装过程中偷偷篡改了你&lt;/p&gt;&lt;p&gt;的后台、捆绑安装一些别的软件、安装完强行打开网页或者启动程序。虽然经常有人问我怎样在安&lt;/p&gt;&lt;p&gt;装结束时启动软件，但是我还想说一句：请做一个有道德的打包者，至少，你要有个界面让用户选&lt;/p&gt;&lt;p&gt;择：要不要启动该软件。&lt;/p&gt; &lt;img src="http://www.cnblogs.com/Cindy_weiwei/aggbug/1940309.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Cindy_weiwei/archive/2011/01/20/1940309.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
