
第二步:仔细核对文件名,确定安装文件夹中的确有需要的文件,但为什么还是提示找不到呢?
既然这个组件使用Office 2007的安装方式,文件夹中也有office.zh-cn这个和Office 2007共有的组件,那会不会是因为Office 2007的问题,导致Visual Studio Web 创作组件无法安装呢?
第三步:打开Vista中的“程序和功能”,选择Office 2007,并单击”更改“按钮,在d出的安装程序界面中,选择”修复“,并继续,果然不出所料,这时也出现了同样的找不到安装文件的对话框,基本确定是因为Office 2007的问题导致Visual Studio 安装失败。
第四步:这时想起来,在安装Office时,安装程序默认情况下会将安装文件缓存在系统分区的隐藏文件夹MSOCache中,安装完成后并不会将其删除。由于这个文件夹实在是太大了,平常用Office其实并不需要它,因此安装完Office之后就手动将其删除了,而在修复Office组件时,需要访问MSOCache文件夹中的安装文件,所以就出现了以上问题。以往的经验是,已删除MSOCache文件夹时,可以放入Office原来的安装光盘,即可顺利修复。于是直接放入Office 2007的安装光盘,在d出寻找文件的对话框时,指向安装盘中office.zh-cn文件夹所在的位置(一般是光驱根目录),Office 2007被成功修复,这时再安装Visual Studio Web 创作组件,也顺利的安装上了
第五步:接下来启动Visua Studio 2008安装程序,也顺利的安装,没有再遇到问题。安装完成后可以再次删除安装Visual Studio Web 创作组件时缓存下来的MSOCache文件夹(注意是隐藏文件夹)。
至此终于找到原因,原来是因为Office 2007的安装源缓存MSOCache文件夹被用户删除导致的。只要找到Office 2007的安装文件,即可顺利安装Visual Studio Web 创作组件。
最后还要考虑一个问题,为什么指向Visual Studio Web 创作组件安装程序中的office.zh-cn文件夹无法通过验证,而Office 2007安装盘中的office.zh-cn文件就可以呢?对比两个文件夹发现,其中只有OfficeLR.cab、officemui.msi、officemui.xml三个文件不同,而前两个主要文件,仅仅是数字签名日期不同。可能是由于系统中已经安装了Office 2007,而记录了这些安装程序的哈希值,安装程序只承认Office 2007的安装文件版本,而不接受其他的版本。
亲 告诉你一个最简单的方法 我靠 我因为这个装不上 换了N遍系统 总算解决了 我的安装文件 是从一个同学的硬盘拷过来的 总是出各种错 系统必备 创作组件 问题报错 还有.NET Framework3.5出错 因为从他硬盘考到我电脑 不知道怎么回事儿 总是少文件 拷给他自己却不少 所以自己重新下载了一个VS2008 大概3.7G 安装 一遍成功!超爽!查资料的时候看到你的问题 现在特来留言~~有时我们除了需要安装系统必备组件之外,还需要做自定义的子安装程序,如我的系统安装程序就需要同时安装Oracle精简客户端(网上下载的精简3.0版,以下简称JOracle30)才能支撑系统数据库的应用,怎样才能让VS2008部署程序自动执行这套JOracle30的安装程序呢?我首先想到的是用程序去实现,必竟大名鼎鼎的InstallShield安装系统也是MS做的,VS2008部署程序应该也是集成的InstallShield吧,用DoInstall脚本函数还是能轻而易举地调用其他安装程序的。可是,我将IDE翻了个遍也没有找到VS2008部署系统的程序入口,感情是人家根本就没有提供脚本程序让你写吧?C#到是可以写个类来控制,可我的是VC++程序,折腾半天还不知能不能用,还是另外找条路吧。
于是好一阵闹腾,网上帖子都翻遍了,都是不咸不淡,语焉不详,正心灰意冷时,突然想起了在系统安装部署制作时,要选择系统必备项,是不是可以将Joracle30作为系统必备项让部署程序进行选择呢?这样的安装程序可能既专业又优雅。这样我的突破重点就是如何针对VS2008做自定义的系统必备项了。结果证明我的方向是完全正确的,经过半天的努力,终于成功了!现将 *** 作步骤整理如下,希望能对如我一般陷此困惑的朋友有所帮助,或能抛砖引玉!
(1)将自定义的安装程序COPY至Bootstrapper文件夹中
VS2008的系统必备项是用特定文件路径和xml描述文件一起构成的,这点倒是和JAVA应用服务器很像。这个Bootstrapper是具体路径在我的机器中是:“C:/Program Files/Microsoft SDKs/Windows/v6.0A/Bootstrapper/Packages”。在这个目录中,您可很清楚地看到在VS2008部署程序中可选的所有的组件,呵呵。我们要依葫芦画瓢同样建一个文件夹“Oracle精简客户端”这样的系统必备组件。名称就起“Oracle9i客户端精简版30”好了。如下:
在“Oracle9i客户端精简版30”文件夹中,断续建一个“zh-CHS”安装本地化文件夹,将安装程序COPY进这个文件夹中,如:
我的Oracle精简客户端安装有两文件,“Oracle9i客户端精简版3.0.msi”和“Oracle9i客户端精简版3[1].0.part2.rar”。
至此,我们将系统必备项所需的目录结构建好了,但是还不行,还需要将描述文件手动构建起来,其实就是两个xml文件。
(2)创建产品清单和程序包清单
产品清单其实就是“Oracle9i客户端精简版30”文件夹下的那个product.xml文件;程序包清单其实就是“zh-CHS”文件夹下的package.xml文件。
Product.xml文件的清单如下:
<?xml version="1.0" encoding="utf-8"?>
<Product ProductCode="Oracle9i 精简客户端3_青蛙王子" xmlns="htt p:/ /schemas.microsoft.c om/developer/2004/01/bootstrapper">
</Product>
这倒没什么可说的,倒是这个ProductCode究竟是不是一定用精简客户端安装的ProductCode我还没有发现有什么弊端,我在一台已安装精简客户端的机器的注册表将实际的ProductCode找了出来,但是没有用它,反正我用"Oracle9i 精简客户端3_青蛙王子"这个字符串也能工作。
Package.xml文件的清单如下:
<?xml version="1.0" encoding="utf-8"?>
<Package Name="Oracle9i 精简客户端3_0" Culture="Culture" xmlns="htt p:/ /schemas.microsoft.c om/developer/2004/01/bootstrapper">
<InstallChecks>
<RegistryCheck Property="ORACLE_INST" Key="HKLM/SOFTWARE/Microsoft/ORACLE/inst_loc" Value="C:/Program Files/Oracle/Inventory"/>
</InstallChecks>
<PackageFiles CopyAllPackageFiles="false">
<PackageFile Name="Oracle9i客户端精简版3[1].0.part2.rar"/>
<PackageFile
Name="Oracle9i客户端精简版3.0.msi"
HomeSite="HomeSiteName_32" />
</PackageFiles>
<Commands Reboot="Defer">
<Command PackageFile="Oracle9i客户端精简版3.0.msi" Arguments=''>
<InstallConditions>
<BypassIf Property="ORACLE_INST" Compare="ValueExists"/>
</InstallConditions>
</Command>
</Commands>
</Package>
Package 元素的 Name 属性的值 其实就是 在VS2008部署程序的系统必备选择框中显示的组件名称。
<PackageFiles>元素用来指定组件包括的文件,要将每个安装文件要用子元素<PackageFile>指定出来哦,VS2008部署程序在编译生成安装文件时,就是按这个清单将组件的文件COPY过去的。
<InstallChecks><Commands >这两个元素是要配对的,和struts框架的控制文件一样,它们的主要作用就是利用注册表项或文件来判断组件是否需要安装。我是用注册表来判断oracle是否已经在客户端上安装,就需要用<RegistryCheck>元素来检查,用“HKLM/SOFTWARE/Microsoft/ORACLE/inst_loc”这个注册表键来判断检查,并给这个检查项目起个名字叫“ORACLE_INST”。
<Command>元素则是在<InstallConditions>元素指定的条件满足时,执行相应的组件安装程序,这里我的安装程序是“Oracle9i客户端精简版3.0.msi”,是一个普通的安装程序,没有参数。
<InstallConditions>元素我的理解就是指定安装条件啦,<BypassIf Property="ORACLE_INST" Compare="ValueExists"/>一句我的想法是:如果注册表存在“HKLM/SOFTWARE/Microsoft/ORACLE/inst_loc”这个键就认为已经安装了Oracle客户端,就不用执行精简客户端安装,否则视为没有安装,就要执行。
(3)配置完毕!
我们到VS2008部署程序的系统必备选择项中找找,果真发现了“Oracle9i 精简客户端3_0”这个组件了。如下图:
呵,以下就是选择他,编译生成部署项目即可。在生成的安装目录中,精简客户端目录就在其中。 (4)运行setup.exe文件,即可执行安装程序了,记住了,不是执行msi文件,msi安装文件不能进行系统必备组件的判断安装。系统必备组件安装如下图。
(5)有一点遗憾的是,我的本意如果客户端已经安装了Oracle客户端,就不用执行精简客户端安装,没有安装,就要执行。可我将这个安装软件在已经安装了Oracle客户端的机器上试运行时,安装软件还是提示需要安装“Oracle9i 精简客户端3_0”,虽然安装过程一闪而过,可能实际上并没有执行
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)