精华内容
下载资源
问答
  • 今天升级了iOS7.1后发现通过之前的url无法安装企业应用了,一直提示“无法安装应用程序 因为http://xxx.xxx.xxx证书无效”,折腾了一番,终于在StackOverFlow上找到了答案。在这里分享给大家。

    今天升级了iOS7.1后发现通过之前的url无法安装企业应用了,一直提示“无法安装应用程序 因为http://xxx.xxx.xxx证书无效”,折腾了一番,终于在StackOverFlow上找到了答案。在这里分享给大家。

    StackOverFlow链接:http://stackoverflow.com/questions/20276907/enterprise-app-deployment-doesnt-work-on-ios-7-1/22325916#22325916

    原因是由于iOS7.1要安装企业应用,url必须是https的,不能是http,这就要求我们的服务器要支持https。因此,只要将原链接:

    itms-services://?action=download-manifest&url=http://example.com/manifest.plist

    改为

    itms-services://?action=download-manifest&url=https://example.com/manifest.plist


    即可。

    对于服务器,则需要增加对https的支持,本人用的是apache服务器,所以在这里以windows上的apache服务器为例:

    1. 安装配有SSL模块的apache版本,本人使用的是httpd-2.0.65-win32-x86-openssl-0.9.8y

    2. 打开apache的配置文件conf/httpd.conf,去掉以下内容前的#

    LoadModule ssl_module modules/mod_ssl.so

    并在文件最后加上:

    <VirtualHost *:8080>
        ServerAdmin xxx@mail.xxx.com(邮箱地址,随意)
        DocumentRoot D:/Server(服务器根目录)
        ServerName 166.111.81.xxx(服务器域名或ip地址)
        ErrorLog logs/test-error_log
        CustomLog logs/test-access_log common
        SSLEngine on
        SSLCertificateFile "D:/Program Files/Apache Group/Apache2/conf/ssl.crt/server.crt"(之后生成证书的完整路径)
        SSLCertificateKeyFile "D:/Program Files/Apache Group/Apache2/conf/ssl.key/server.key" (之后生成密钥的完整路径)
    
    </VirtualHost>

    3. 修改conf/ssl.conf文件的以下内容:(以下为修改完的,大家可以参考下)

    #SSLSessionCache        none
    #SSLSessionCache        shmht:logs/ssl_scache(512000)
    SSLSessionCache        shmcb:logs/ssl_scache(512000)
    #SSLSessionCache         dbm:logs/ssl_scache
    ...
    SSLCertificateFile conf/ssl.crt/server.crt
    ...
    SSLCertificateKeyFile conf/ssl.key/server.key
    4. 在conf目录下创建ssl.crt和ssl.key目录(不创建也行,只要保证以上两个路径和之后的文件路径对应即可)

    5. 在命令行下切换到apache目录下的bin目录,运行以下命令

    生成服务器的私钥:

    openssl genrsa -out server.key 1024
    6. 生成签署申请(注意除Common Name以外可以为空,Common Name必须为服务器的ip或域名):

    openssl req -new –out server.csr -key server.key -config ..\conf\openssl.cnf
    7. 生成CA私钥:

    openssl genrsa  -out ca.key 1024
    8. 利用CA的私钥产生CA的自签署证书(注意除Common Name以外可以为空,Common Name必须为服务器的ip或域名):

    openssl req  -new -x509 -days 365 -key ca.key -out ca.crt  -config ..\conf\openssl.cnf

    9. 在当前目录创建demoCA,里面创建文件index.txt和serial,serial内容为01,index.txt为空,以及文件夹newcerts。

    10. CA为网站服务器签署证书:

    openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config ..\conf\openssl.cnf
    11. 最后将server.crt,server.key复制到上文对应的路径下:

    conf/ssl.crt/server.crt
    conf/ssl.key/server.key
    12. 重启Apache服务器,即增加了https的支持。可以在浏览器访问https://localhost试试。如果不行,可以在logs\test-error_log文件中看看出了什么错误。

    13. 最后,我们要将自己创建的CA证书安装到iphone上。将第10步生成的ca.crt文件通过邮件发送到iphone上,用自带的Mail程序(别的程序不行)打开安装即可。

    14. 现在,再次访问我们之前的itms-services链接,就可以正常安装了。


    这种方法如果大家觉得麻烦的话可以把plist和ipa传到dropbox上,获取静态链接,因为dropbox的服务器支持https且有第三方发布的证书,唯一的缺点是国内可能会慢一些。


    如果大家觉得对自己有帮助的话,还希望能帮顶一下,谢谢:)
    转载请注明出处,谢谢!

    展开全文
  • 今天升级了iOS7.1后发现通过之前的url无法安装企业应用了,一直提示“无法安装应用程序 因为http://xxx.xxx.xxx证书无效”,折腾了一番,终于在StackOverFlow上找到了答案。在这里分享给大家。 StackOverFlow链接...

    http://blog.csdn.net/zhaoxy_thu/article/details/21133399

    今天升级了iOS7.1后发现通过之前的url无法安装企业应用了,一直提示“无法安装应用程序 因为http://xxx.xxx.xxx证书无效”,折腾了一番,终于在StackOverFlow上找到了答案。在这里分享给大家。

    StackOverFlow链接:http://stackoverflow.com/questions/20276907/enterprise-app-deployment-doesnt-work-on-ios-7-1/22325916#22325916

    原因是由于iOS7.1要安装企业应用,url必须是https的,不能是http,这就要求我们的服务器要支持https。因此,只要将原链接:

    1. itms-services://?action=download-manifest&url=http://example.com/manifest.plist  

    改为

    [plain]  view plain copy
    1. itms-services://?action=download-manifest&url=https://example.com/manifest.plist  

    即可。

    对于服务器,则需要增加对https的支持,本人用的是apache服务器,所以在这里以apache服务器为例:

    1. 安装配有SSL模块的apache版本,本人使用的是httpd-2.0.65-win32-x86-openssl-0.9.8y

    2. 打开apache的配置文件conf/httpd.conf,去掉以下内容前的#

    [plain]  view plain copy
    1. LoadModule ssl_module modules/mod_ssl.so  

    并在文件最后加上:

    [plain]  view plain copy
    1. <VirtualHost *:8080>  
    2.     ServerAdmin zhaoxinyan12@mails.tsinghua.edu.cn(随意)  
    3.     DocumentRoot D:/Server(服务器根目录)  
    4.     ServerName 166.111.81.xxx(服务器域名或ip地址)  
    5.     ErrorLog logs/test-error_log  
    6.     CustomLog logs/test-access_log common  
    7.     SSLEngine on  
    8.     SSLCertificateFile "D:/Program Files/Apache Group/Apache2/conf/ssl.crt/server.crt"(之后生成证书的完整路径)  
    9.     SSLCertificateKeyFile "D:/Program Files/Apache Group/Apache2/conf/ssl.key/server.key" (之后生成密钥的完整路径)  
    10.   
    11. </VirtualHost>  

    3. 修改conf/ssl.conf文件的以下内容:(以下为修改完的,大家可以参考下)
    [plain]  view plain copy
    1. #SSLSessionCache        none  
    2. #SSLSessionCache        shmht:logs/ssl_scache(512000)  
    3. SSLSessionCache        shmcb:logs/ssl_scache(512000)  
    4. #SSLSessionCache         dbm:logs/ssl_scache  
    5. ...  
    6. SSLCertificateFile conf/ssl.crt/server.crt  
    7. ...  
    8. SSLCertificateKeyFile conf/ssl.key/server.key  
    4. 在conf目录下创建ssl.crt和ssl.key目录(不创建也行,只要保证以上两个路径和之后的文件路径对应即可)

    5. 在命令行下切换到apache目录下的bin目录,运行以下命令

    生成服务器的私钥:

    [plain]  view plain copy
    1. openssl genrsa -out server.key 1024  
    6. 生成签署申请(注意除Common Name以外可以为空,Common Name必须为服务器的ip或域名):
    [plain]  view plain copy
    1. openssl req -new –out server.csr -key server.key -config ..\conf\openssl.cnf  
    7. 生成CA私钥:
    [plain]  view plain copy
    1. openssl genrsa  -out ca.key 1024  
    8. 利用CA的私钥产生CA的自签署证书(注意除Common Name以外可以为空,Common Name必须为服务器的ip或域名):
    [plain]  view plain copy
    1. openssl req  -new -x509 -days 365 -key ca.key -out ca.crt  -config ..\conf\openssl.cnf  

    9. 在当前目录创建demoCA,里面创建文件index.txt和serial,serial内容为01,index.txt为空,以及文件夹newcerts。

    10. CA为网站服务器签署证书:
    [plain]  view plain copy
    1. openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config ..\conf\openssl.cnf  
    11. 最后将server.crt,server.key复制到上文对应的路径下:
    [plain]  view plain copy
    1. conf/ssl.crt/server.crt  
    2. conf/ssl.key/server.key  
    12. 重启Apache服务器,即增加了https的支持。可以在浏览器访问https://localhost试试。如果不行,可以在logs\test-error_log文件中看看出了什么错误。

    13. 最后,我们要将自己创建的CA证书安装到iphone上。将第10步生成的ca.crt文件通过邮件发送到iphone上,用自带的Mail程序(别的程序不行)打开安装即可。

    14. 现在,再次访问我们之前的itms-services链接,就可以正常安装了。



    展开全文
  • MSI 安装程序中的文件替换

    千次阅读 2013-08-14 12:27:14
    目前可以用于MSI编辑的软件很多,但是有些软件在保存时会在MSI文件中写入一些自己的表或内容,有些会另外嵌入一个CAB文件,使得MSI文件增大。而这里提供的方法保证不会写入任何不必要的内容和文件。 ※关键点: ...

    ※说明:
    目前可以用于MSI编辑的软件很多,但是有些软件在保存时会在MSI文件中写入一些自己的表或内容,有些会另外嵌入一个CAB文件,使得MSI文件增大。而这里提供的方法保证不会写入任何不必要的内容和文件。

    ※关键点:
    1、CAB中的文件顺序要和MSI的文件表中的文件顺序保持一致。
    2、有些CAB中的文件使用了Windows不支持的文件名。
     

    软件准备

    1、Orca,微软提供的MSI编辑器。汉化版下载地址(版本为 4.5.6001.22192):
    http://www.hanzify.org/index.php?Go=Show::List&ID=11122 或
    http://www.wanfutrade.com/software/hanhua/Orca45chs.msi

    2、MsiDb,微软提供的MSI中CAB文件提取和替换工具。本人的汉化版下载地址(版本为4.5.6001.22192):
    http://www.wanfutrade.com/software/hanhua/MsiDb.exe

    3、IExpress,微软提供的CAB文件打包用户界面工具。本人的汉化版下载地址(版本为6.0.3790.0):
    http://www.wanfutrade.com/software/hanhua/iexpress20.exe

    4、Excel,相信这个大家都有吧。什么版本都可以。

    基础知识

    1、MSI文件的格式
    MSI文件实际上一个安装数据库,里面有很多表,这些表都是由 TAB 格式写成的文本,就像EXCEL一样由列和行组成。可以从MSI中导出每个表。导出的表可以用文本编辑器和EXCEL打开。至于每个表和表中每个字段的作用就不在这里讲述了。请参考微软提供的相关资料。

    2、MSI安装文件存在形式
    MSI 安装程序中,需要安装的文件的存在形式许多种,常见的有以下几种:
    (1)安装文件被打包为CAB文件,并嵌入在MSI文件中
    (2)安装文件被打包为CAB文件,但CAB独立于MSI存在
    (3)安装文件未被打包为CAB文件,而是以原来的状态存在于各个文件夹中
    对于以(1)、(2)形式存在的CAB文件,可以采用本文介绍的方法替换,而对于以(3)形式存在的文件文件直接替换即可。

    3、MSI安装文件列表
    在MSI文件中有二个表是用来表达CAB中的文件列表和CAB文件的名称和文件数以及其他信息的,这就是 File 表和 Media 表,其中File表保存了CAB中存在的文件名以及每个文件所属的组件、安装后的实际文件名、文件大小、版本、语言、属性和文件顺序等信息,Media表保存了CAB文件的磁盘ID、文件数、磁盘描述、CAB文件名以及卷标等信息。

    先来看一下MSI文件中这二个表:
    (1)File表
     
    上面就是File表,对涉及到本主题的列说明如下:
    File列,表示 CAB中的文件名列表,有的是我们常见的文件名格式,有的则在常见文件名后加上许多像类 ID那样的编号,有的干脆就是一个编号。对为什么不用常见的文件名,我想是由于有的MSI制作软件为了某种目的故意这样命名的。特别是InstallShield制作的MSI文件。
    Compoent_ 列,表示该文件属于哪个组件。
    FileName 列,表示安装后的文件名。其中 | 前面的为短文件名,后面的为长文件名。
    FileSize 列,表示文件的大小。一般不需要更改它,即使替换后的文件与其不一致。
    Language 列,表示文件所用的语言。一般也不需要更改它,即使替换后的文件语言与其不一致。
    Attributes 列,表示文件的属性,比如隐藏、系统、存档等等。一般也不需要更改它,除非您有特别的用途,如想在安装后隐藏某个文件。
    Sequenec 列,表示文件的序号,这里的需要不允许重复,并且始终是从1开始的。

    (2)Media表
    附加图片
    Media表中,DiskID、DiskPrompt、VolumeLable、Source列一般不需要去考虑,这里主要介绍以下其他二个列。
    LastSequence 列,表示CAB中的文件数,也就是上述File表中Sequenec 列中的最大数,这二个数一定要一致。
    Cabinet 列,表示 CAB文件名。注意:文件名前的“#”不是真正文件名的一部分。

    开始实践

    1、首先提取嵌入在MSI中的CAB文件。 如果是CAB文件独立于MSI,跳过该操作。
      在DOS下或MsiDb.exe快捷方式下,使用“MsiDb.exe –x CAB文件名 -d MSI文件名”命令提取。
    其中:(1)CAB文件名就是Media表中的Cabinet 列中的CAB文件名。注意忽略前置的“#”。
    (2)CAB 和 MSI 文件名均要带后缀扩展名。

    2、直接用Windows 资源管理器或RAR或其他压缩软件提取CAB文件中的文件到一个单独的文件夹。

    3、使用CMD命令,转入DOS界面,在释放CAB中的文件的单独文件夹下,使用“dir /b > CabFileList.xls”命令提取该文件夹中的文件名列表。这里的CabFileList.xls文件名您可以用其他文件名代替,自由命名。

    4、用MsiDb.exe或Orca打开MSI文件,导出MSI文件中的File表。导出后的文件名为File.idt。

    5、用EXCEL打开File.idt文件,并按 Sequenec 列对整个表进行排序备用。如下图。
    附加图片

    6、比较从CAB中提取的文件数量是否与MSI文件中的File表中所列的文件数量相等。可以直接在MSI文件和解开的文件夹中判断,也可以用EXCEL分别打开前面生成的CabFileList.xls和File.idt进行判断。
    (1)如果相等,一般情况下说明文件名都是相同的。
    (2)如果不等,说明CAB中的某些文件有Windows 系统不认可的文件名存在,比如CAB中有XXX.(注意XXX后面的 . )这样的文件名。
    在不相等的情况下,用EXCEL分别打开前面生成的CabFileList.xls和File.idt二个文件,分别对文件名列进行排序,并将File.idt文件的文件名所在列整列复制到CabFileList.xls中的一个新列中,并用IF函数判断二者是否有差异。如图所示(注意Msi_FileTable_FileList列中后面带 . 的文件)。
    附加图片

    7、在提取的文件夹中,将在有差异的文件的文件名后添加一个数字或其他什么,将其改名,然后再从CAB文件中提取有差异的文件的另一个文件。

    8、在CabFileList.xls中插入一个工作表,将第5步中已排序的File.idt 文件的File列和Sequenec 列分别复制到新的工作表中,并在其他列中添加“FILE”、“"”、“=”等列,然后用CONCATENATE文本合并函数,将这些列中的数据合并成IExpress所需的脚本格式。如图所示。
    附加图片

    9、用汉化好的文件替换已解开的文件(注意:第6、7步中有差异的文件)。
    ※推荐直接汉化已解开的文件,以免重新命名等麻烦。

    10、运行IExpress,选择“仅创建压缩文件”选项(如图),将已用汉化替换的文件全部或部分添加到要打包的文件中,然后选择“在软件包中使用长文件名保存文件”选项,最后保存好.SED扩展名的IExpress脚本文件。
    附加图片
    附加图片
    附加图片

    11、修改IExpress脚本文件。用文本编辑器打开刚才保存的IExpress脚本文件(.sed),并从第8步的EXCEL表中复制SED[Strings] 列到IExpress脚本文件的 [Strings] 节中,同理,复制SED[SourceFiles0] 列到 [SourceFiles0] 节。
    ※重要提示:
    如果第6、7步中有差异文件存在,请在IExpress脚本文件的 [Strings] 节中,将有差异的文件按MSI文件中的文件名命名(在第8步中已经采用了MSI中的文件名列表,所以这里一般不需要修改)。并将IExpress脚本文件的 [SourceFiles0] 节中的文件名全部改为在资源管理器中存在的实际文件名。
    ※备注:
    (1)在一般的IExpress脚本文件(.sed)的[SourceFiles0] 节中的“=”号后是没有文件名的。因为有差异文件名存在,所以这里需要特别处理。
    (2)创建CAB时,程序会自动删除[SourceFiles0]节中的所有文件名。请注意保存备份,并在下次创建时复制回去。


    12、再次运行IExpress,打开刚才修改好的IExpress脚本文件,一路下一步,一个已用汉化后文件替换的符合MSI文件中的File表的文件顺序的新CAB文件生成了。

    13、将新的CAB文件插入到MSI文件中。 如果是CAB文件独立于MSI,跳过该操作。
      首先,在DOS下或MsiDb.exe快捷方式下,使用“MsiDb.exe -k CAB文件名 -d MSI文件名”命令删除MSI文件中的CAB文件(其实只是清除关联)。然后使用“MsiDb.exe -a CAB文件名 -d MSI文件名”命令插入新的CAB文件到MSI文件中。
    其中:(1)CAB文件名就是Media表中的Cabinet 列中的CAB文件名。注意忽略前置的“#”。
    (2)CAB 和 MSI 文件名均要带后缀扩展名。

    如果提示不成功,请先用“MsiDb.exe -k CAB文件名 -d MSI文件名”命令清除流,然后再用“MsiDb.exe -a CAB文件名 -d MSI文件名”添加新的CAB文件。
    注意:MsiDb.exe 对某些长文件夹名不支持,会提示错误。建议尽量用短文件夹名。 

    14、安装测试。运行一下安装程序,看看是否会在安装过程中出现类似“文件不存在”等错误,如果没有,则大功告成。

    备注

    1、谢谢您阅读,如果本文对您有些帮助,将十分荣幸。
    2、本文版权属wanfu所有,欢迎在保持完整和不修改的条件下转载本文。
    3、联系邮件:z_shangyi@163.com

    关于压缩率

    1、默认情况下,用IEPress制作的CAB文件压缩率相对较低。经初步测试,IEpress的脚本支持Makecab.exe的所有参数,只要在[Options]节中添加CompressionType=lzx一行,就可以实现 lzx 压缩率。
    2、根据 zhfi 网友的提示,查了一下有关资料,用 cabarc.exe -m LZX:21 -r N CAB文件名 "文件所在目录\*" 命令确实可以获得比 IEpress 更高的压缩率,而且不存在顺序问题。但是如果有MSI 中有 XXX. 这样的文件,而实际解压后没有了 XXX. 这样的文件,就无法打包成和原始CAB一样的新CAB文件,只能通过修改MSI文件中的File表中的File列中的相关文件名以及在其他表中所关联的文件名才能解决。
    3、根据汉化好友"鱼“的方法,可以在要压缩的文件所在的文件夹下,用以下命令行实现:
    makecab /f <完整路径>MsiFileList.txt /d compressiontype=lzx /d compressionmemory=21 /d maxdisksize=1024000000 /d diskdirectorytemplate=data* /d cabinetnametemplate=data*.cab
    这里:MsiFileList.txt 是指MSI文件中File表中的File列的文件名列表(请按Sequenec 列从小到大排列),
    diskdirectorytemplate=data* 中的 data*,即分卷压缩的情况下,在要压缩的文件所在的文件夹下生成 data1/data2/data3……文件夹,不分卷压缩的情况下,只生成一个文件夹。
    cabinetnametemplate=data*.cab 中的 data*.cab,即分卷压缩的情况下,data1/data2/data3……文件夹中生成data1.cab/data2.cab/data3.cab......等CAB文件名。
    但是,如果有原CAB中有XXX. 和XXX二个解压后文件名相同的文件,那么该方法就不适用了。
    4、如果你已经删除了CAB中的一些文件,并对相关的MSI表进行了修改(如不修改会出现安装错误!),需要缩小MSI文件的话,请使用Orca打开清流后的MSI,然后另存为一个MSI文件,然后用MsiDb.exe插入新的CAB即可。






    注:本文转载自:http://teach.hanzify.org/article/652-1233562028.html


    展开全文
  • MSI安装程序中的文件替换

    千次阅读 2014-04-30 03:11:17
    最近有汉化朋友问起如何不重新制作MSI文件,而直接用汉化好的文件替换MSI安装程序中的文件。为此,将本人的实践经验作个总结,供各位汉化人参考。有错误的地方烦请指正。 ※说明: 目前可以用于MSI编辑的软件...

    转载自:http://teach.hanzify.org/article/652-1233562028.html


    前言

    最近有汉化朋友问起如何不重新制作MSI文件,而直接用汉化好的文件替换MSI安装程序中的文件。为此,将本人的实践经验作个总结,供各位汉化人参考。有错误的地方烦请指正。

    ※说明:
    目前可以用于MSI编辑的软件很多,但是有些软件在保存时会在MSI文件中写入一些自己的表或内容,有些会另外嵌入一个CAB文件,使得MSI文件增大。而这里提供的方法保证不会写入任何不必要的内容和文件。

    ※关键点:
    1、CAB中的文件顺序要和MSI的文件表中的文件顺序保持一致。
    2、有些CAB中的文件使用了Windows不支持的文件名。
     

    软件准备

    1、Orca,微软提供的MSI编辑器。汉化版下载地址(版本为 4.5.6001.22192):
    http://www.hanzify.org/index.php?Go=Show::List&ID=11122 或
    http://www.wanfutrade.com/software/hanhua/Orca45chs.msi

    2、MsiDb,微软提供的MSI中CAB文件提取和替换工具。本人的汉化版下载地址(版本为4.5.6001.22192):
    http://www.wanfutrade.com/software/hanhua/MsiDb.exe

    3、IExpress,微软提供的CAB文件打包用户界面工具。本人的汉化版下载地址(版本为6.0.3790.0):
    http://www.wanfutrade.com/software/hanhua/iexpress20.exe

    4、Excel,相信这个大家都有吧。什么版本都可以。

    基础知识

    1、MSI文件的格式
    MSI文件实际上一个安装数据库,里面有很多表,这些表都是由 TAB 格式写成的文本,就像EXCEL一样由列和行组成。可以从MSI中导出每个表。导出的表可以用文本编辑器和EXCEL打开。至于每个表和表中每个字段的作用就不在这里讲述了。请参考微软提供的相关资料。

    2、MSI安装文件存在形式
    MSI 安装程序中,需要安装的文件的存在形式许多种,常见的有以下几种:
    (1)安装文件被打包为CAB文件,并嵌入在MSI文件中
    (2)安装文件被打包为CAB文件,但CAB独立于MSI存在
    (3)安装文件未被打包为CAB文件,而是以原来的状态存在于各个文件夹中
    对于以(1)、(2)形式存在的CAB文件,可以采用本文介绍的方法替换,而对于以(3)形式存在的文件文件直接替换即可。

    3、MSI安装文件列表
    在MSI文件中有二个表是用来表达CAB中的文件列表和CAB文件的名称和文件数以及其他信息的,这就是 File 表和 Media 表,其中File表保存了CAB中存在的文件名以及每个文件所属的组件、安装后的实际文件名、文件大小、版本、语言、属性和文件顺序等信息,Media表保存了CAB文件的磁盘ID、文件数、磁盘描述、CAB文件名以及卷标等信息。

    先来看一下MSI文件中这二个表:
    (1)File表
     
    上面就是File表,对涉及到本主题的列说明如下:
    File列,表示 CAB中的文件名列表,有的是我们常见的文件名格式,有的则在常见文件名后加上许多像类 ID那样的编号,有的干脆就是一个编号。对为什么不用常见的文件名,我想是由于有的MSI制作软件为了某种目的故意这样命名的。特别是InstallShield制作的MSI文件。
    Compoent_ 列,表示该文件属于哪个组件。
    FileName 列,表示安装后的文件名。其中 | 前面的为短文件名,后面的为长文件名。
    FileSize 列,表示文件的大小。一般不需要更改它,即使替换后的文件与其不一致。
    Language 列,表示文件所用的语言。一般也不需要更改它,即使替换后的文件语言与其不一致。
    Attributes 列,表示文件的属性,比如隐藏、系统、存档等等。一般也不需要更改它,除非您有特别的用途,如想在安装后隐藏某个文件。
    Sequenec 列,表示文件的序号,这里的需要不允许重复,并且始终是从1开始的。

    (2)Media表
    附加图片
    Media表中,DiskID、DiskPrompt、VolumeLable、Source列一般不需要去考虑,这里主要介绍以下其他二个列。
    LastSequence 列,表示CAB中的文件数,也就是上述File表中Sequenec 列中的最大数,这二个数一定要一致。
    Cabinet 列,表示 CAB文件名。注意:文件名前的“#”不是真正文件名的一部分。

    开始实践

    1、首先提取嵌入在MSI中的CAB文件。 如果是CAB文件独立于MSI,跳过该操作。
      在DOS下或MsiDb.exe快捷方式下,使用“MsiDb.exe –x CAB文件名 -d MSI文件名”命令提取。
    其中:(1)CAB文件名就是Media表中的Cabinet 列中的CAB文件名。注意忽略前置的“#”。
    (2)CAB 和 MSI 文件名均要带后缀扩展名。

    2、直接用Windows 资源管理器或RAR或其他压缩软件提取CAB文件中的文件到一个单独的文件夹。

    3、使用CMD命令,转入DOS界面,在释放CAB中的文件的单独文件夹下,使用“dir /b > CabFileList.xls”命令提取该文件夹中的文件名列表。这里的CabFileList.xls文件名您可以用其他文件名代替,自由命名。

    4、用MsiDb.exe或Orca打开MSI文件,导出MSI文件中的File表。导出后的文件名为File.idt。

    5、用EXCEL打开File.idt文件,并按 Sequenec 列对整个表进行排序备用。如下图。
    附加图片

    6、比较从CAB中提取的文件数量是否与MSI文件中的File表中所列的文件数量相等。可以直接在MSI文件和解开的文件夹中判断,也可以用EXCEL分别打开前面生成的CabFileList.xls和File.idt进行判断。
    (1)如果相等,一般情况下说明文件名都是相同的。
    (2)如果不等,说明CAB中的某些文件有Windows 系统不认可的文件名存在,比如CAB中有XXX.(注意XXX后面的 . )这样的文件名。
    在不相等的情况下,用EXCEL分别打开前面生成的CabFileList.xls和File.idt二个文件,分别对文件名列进行排序,并将File.idt文件的文件名所在列整列复制到CabFileList.xls中的一个新列中,并用IF函数判断二者是否有差异。如图所示(注意Msi_FileTable_FileList列中后面带 . 的文件)。
    附加图片

    7、在提取的文件夹中,将在有差异的文件的文件名后添加一个数字或其他什么,将其改名,然后再从CAB文件中提取有差异的文件的另一个文件。

    8、在CabFileList.xls中插入一个工作表,将第5步中已排序的File.idt 文件的File列和Sequenec 列分别复制到新的工作表中,并在其他列中添加“FILE”、“"”、“=”等列,然后用CONCATENATE文本合并函数,将这些列中的数据合并成IExpress所需的脚本格式。如图所示。
    附加图片

    9、用汉化好的文件替换已解开的文件(注意:第6、7步中有差异的文件)。
    ※推荐直接汉化已解开的文件,以免重新命名等麻烦。

    10、运行IExpress,选择“仅创建压缩文件”选项(如图),将已用汉化替换的文件全部或部分添加到要打包的文件中,然后选择“在软件包中使用长文件名保存文件”选项,最后保存好.SED扩展名的IExpress脚本文件。
    附加图片
    附加图片
    附加图片

    11、修改IExpress脚本文件。用文本编辑器打开刚才保存的IExpress脚本文件(.sed),并从第8步的EXCEL表中复制SED[Strings] 列到IExpress脚本文件的 [Strings] 节中,同理,复制SED[SourceFiles0] 列到 [SourceFiles0] 节。
    ※重要提示:
    如果第6、7步中有差异文件存在,请在IExpress脚本文件的 [Strings] 节中,将有差异的文件按MSI文件中的文件名命名(在第8步中已经采用了MSI中的文件名列表,所以这里一般不需要修改)。并将IExpress脚本文件的 [SourceFiles0] 节中的文件名全部改为在资源管理器中存在的实际文件名。
    ※备注:
    (1)在一般的IExpress脚本文件(.sed)的[SourceFiles0] 节中的“=”号后是没有文件名的。因为有差异文件名存在,所以这里需要特别处理。
    (2)创建CAB时,程序会自动删除[SourceFiles0]节中的所有文件名。请注意保存备份,并在下次创建时复制回去。


    12、再次运行IExpress,打开刚才修改好的IExpress脚本文件,一路下一步,一个已用汉化后文件替换的符合MSI文件中的File表的文件顺序的新CAB文件生成了。

    13、将新的CAB文件插入到MSI文件中。 如果是CAB文件独立于MSI,跳过该操作。
      首先,在DOS下或MsiDb.exe快捷方式下,使用“MsiDb.exe -k CAB文件名 -d MSI文件名”命令删除MSI文件中的CAB文件(其实只是清除关联)。然后使用“MsiDb.exe -a CAB文件名 -d MSI文件名”命令插入新的CAB文件到MSI文件中。
    其中:(1)CAB文件名就是Media表中的Cabinet 列中的CAB文件名。注意忽略前置的“#”。
    (2)CAB 和 MSI 文件名均要带后缀扩展名。

    如果提示不成功,请先用“MsiDb.exe -k CAB文件名 -d MSI文件名”命令清除流,然后再用“MsiDb.exe -a CAB文件名 -d MSI文件名”添加新的CAB文件。
    注意:MsiDb.exe 对某些长文件夹名不支持,会提示错误。建议尽量用短文件夹名。 

    14、安装测试。运行一下安装程序,看看是否会在安装过程中出现类似“文件不存在”等错误,如果没有,则大功告成。

    备注

    1、谢谢您阅读,如果本文对您有些帮助,将十分荣幸。
    2、本文版权属wanfu所有,欢迎在保持完整和不修改的条件下转载本文。
    3、联系邮件:z_shangyi@163.com

    关于压缩率

    1、默认情况下,用IEPress制作的CAB文件压缩率相对较低。经初步测试,IEpress的脚本支持Makecab.exe的所有参数,只要在[Options]节中添加CompressionType=lzx一行,就可以实现 lzx 压缩率。
    2、根据 zhfi 网友的提示,查了一下有关资料,用 cabarc.exe -m LZX:21 -r N CAB文件名 "文件所在目录\*" 命令确实可以获得比 IEpress 更高的压缩率,而且不存在顺序问题。但是如果有MSI 中有 XXX. 这样的文件,而实际解压后没有了 XXX. 这样的文件,就无法打包成和原始CAB一样的新CAB文件,只能通过修改MSI文件中的File表中的File列中的相关文件名以及在其他表中所关联的文件名才能解决。
    3、根据汉化好友"鱼“的方法,可以在要压缩的文件所在的文件夹下,用以下命令行实现:
    makecab /f <完整路径>MsiFileList.txt /d compressiontype=lzx /d compressionmemory=21 /d maxdisksize=1024000000 /d diskdirectorytemplate=data* /d cabinetnametemplate=data*.cab
    这里:MsiFileList.txt 是指MSI文件中File表中的File列的文件名列表(请按Sequenec 列从小到大排列),
    diskdirectorytemplate=data* 中的 data*,即分卷压缩的情况下,在要压缩的文件所在的文件夹下生成 data1/data2/data3……文件夹,不分卷压缩的情况下,只生成一个文件夹。
    cabinetnametemplate=data*.cab 中的 data*.cab,即分卷压缩的情况下,data1/data2/data3……文件夹中生成data1.cab/data2.cab/data3.cab......等CAB文件名。
    但是,如果有原CAB中有XXX. 和XXX二个解压后文件名相同的文件,那么该方法就不适用了。
    4、如果你已经删除了CAB中的一些文件,并对相关的MSI表进行了修改(如不修改会出现安装错误!),需要缩小MSI文件的话,请使用Orca打开清流后的MSI,然后另存为一个MSI文件,然后用MsiDb.exe插入新的CAB即可。2008-12-07注


    展开全文
  • 首先第一个问题:未找到 app.json 中的定义的 pages “pages/index/index” 对应的 WXML 文件 这个问题貌似初学者都会遇到,而且非常让人抓狂,不知云云。网上百度一圈,发现大家的文章都是大差不差
  • 在做小程序中,偶尔会遇到这种错误: Page "pages/Index/Index" has not been registered yet. 出现错误的位置如下图,在js的Page()上面的代码有误,就会出现以上错误。 这是大多数是我们自己偷懒,从其他页面复制...
  • 怎样用java写一个简单的文件复制程序 代码来源:https://jingyan.baidu.com/article/c35dbcb0d6f1398916fcbc07.html package Number; import java.io.BufferedInputStream; import java.io....
  • VS2010制作网站自定义安装程序

    千次阅读 2014-09-03 15:31:29
    最近在把一个网站打包成安装程序,这方面的文章网上有很多,也看了不少,但因为开发环境的不同,遇到了一些问题,便写下这篇文章记下整个流程(有很多资源都来自互联网,由于条目颇多,所以无法说明其来处,敬请谅解...
  • 微信小程序的富文本编辑器rich-text 没有提供长按出现复制剪切功能,下面是为大家提供的长按实现复制的简单功能,效果没有微信聊天页长按复制的效果好。 步骤: 1,在 rich-text 表签里添加 bindlongpress="copy" ...
  • python读取文件并复制文件

    千次阅读 2018-07-12 11:07:29
    要读取文件,首先当然就是获取文件,读取,然后关闭,这之间需要抓取下文件不存在的异常以保证程序的健壮性;文件的内容读取到了,接着写入内容到指定文件,步骤也是一样的:打开文件,写入,然后关闭 好了,现在...
  • 在不发布情况下,IOS7.1安装开发版IPA,供测试使用:  需要ssl支持,必须生成ca.crt (供终端授信证书使用) , server.crt server.key配置到本地开发服务器使用  http://127.0.0.1/apptest/dev.html 访问跳转即可打开...
  • 今天升级了iOS7.1后发现通过之前的url无法安装企业应用了,一直提示“无法安装应用程序 因为http://xxx.xxx.xxx证书无效”,折腾了一番,终于在StackOverFlow上找到了答案。在这里分享给大家。 StackOverFlow链接:...
  • 利用输入/输出流编写一个程序,实现文件复制的功能,程序的命令行参数的形式及操作功能均类似于DOS中的copy功能 一copy package p1; import java.io.File; import java.util.Vector; public class copy { ...
  • thinkphp安装引导程序

    千次阅读 2017-01-12 20:18:16
    thinkphp安装引导程序 如果还不知道什么是安装引导的; 那先把项目下载下来;放到php环境下跑起来就know了; 示例项目:https://github.com/baijunyao/thinkphp-bjyadmin 我们的程序为什么需要有个安装引导? 1...
  • 设计驱动安装程序(一)

    千次阅读 2013-09-16 11:41:04
    设计驱动安装程序(一) Written by 张佩 mail: changpei1982@gmail.com 目录 硬件主导安装 软件主导安装 安装驱动包 安装设备 设备正连接 设备未连接 枚举系统设备 分析INF文件 DrvInst介绍 制作软件...
  • 程序用 rich-text长按复制事件

    千次阅读 2019-10-21 13:58:28
    微信小程序的富文本编辑器 rich-text 没有提供长按出现复制剪切功能,下面是为大家提供的长按实现复制的简单功能,效果没有微信聊天页长按复制的效果好。 1,在 rich-text 表签里添加 bindlongpress=“copy” data-...
  • 1:首先使用npm、cnpm或者yarn下载所需插件,以nodemon这个插件举例 npm install -g nodemon ...找到nodejs下的nodemon插件,复制此路径!下面要用到。 4:右击--我的电脑--单击属性--高级系统设置...
  • 设备驱动安装程序设计(一)

    万次阅读 热门讨论 2010-07-18 13:24:00
    设计驱动安装程序(一)Written by 张佩mail: changpei1982@gmail.com目录硬件主导安装...... 20上一章讲完了安装文件,在这一章中,笔者要和大家一起设计一个软件,用来安装驱动程序。软件安装,本质
  • 通过itms-services协议,可以通过safari浏览器直接在iOS设备上安装应用程序。利用这种方式,只要在内网布置一个服务器,测试人员只需要通过测试设备的safari浏览器访问特定的url既可以实现安装,然后测试了。(PS:...
  • Visual Studio 工程制作程序安装

    千次阅读 2018-07-16 20:45:34
    参考:Visual Studio 2010制作程序安装包 制作ICO图标文件的网站:比特虫在线制作ico图标 VS2010安装包制作全过程图解 (1)准备执行文件 程序编译后后生成Release 文件夹,里面有exe可执行文件。 将这个文件...
  • 客户端 Web 应用程序的种子文件。 包括 Jquery、Backbone 和 Underscore。 对 CSS 使用 LESS。 用于 JS 模板的把手。 安装 抓住这个代码(选择一个) 分叉这个 repo() 复制此存储库() 下载压缩包 安装 吞咽...
  • 快速批量复制文件

    千次阅读 2020-05-07 22:38:50
    快速批量复制文件,比如在图库里面提取一些指定名字的图片。
  • 微信小程序实现word,excell等文件下载微信小程序复制文件到剪切板fastfdfs后台编写小程序页面编写小程序js编写运行结果 微信小程序 设计了一个微信小程序,要实现word、excell、ppt、pdf等文件下载的功能并且能通过...
  • EasyRad是一个浏览器应用程序,可让您填写放射线报告模板并将结果以HTML或纯文本格式复制到剪贴板中以进行进一步处理。 模板必须符合IHE放射技术模板放射报告模板补充管理(MRRT)。 安装 将此项目的easyrad目录...
  • |Ubuntu搭建PHP环境并安装Piwik程序、介绍扩展热安装的方法   文章导航: 1、安装MySQL数据库 2、php-5.3.8.tar.gz 下载地址 3、编译安装php-5.3.8.tar.gz 4、配置php.ini 5、修改apache配置文件httpd.conf ...
  • 在必要的情况下,我们需要将数据库的信息导入到Excel表格中。这时候,通过云函数很容易可以实现该功能。 先看一下效果: ...打开index.js文件,我们编写云函数代码: const cloud = require('wx-server-sdk') cl

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 203,555
精华内容 81,422
关键字:

安装程序无法复制文件index