正文

在工作中,曾经遇到过一个问题。

有一个 component,名字叫做 Oxford Adaptive Learning Dictionary,是一款牛津词典的应用。这个 component,需要安装在 Windows 10 的系统上。这个应用属于 UWP 应用,用行话来讲,叫做 Modern App。Modern App 是区别于 Win32 App 的一种应用(按照我的理解,在 Win8 和 Win8.1 之后,才有了 “应用” 这一说法,在这之前,我们都把他们叫做 “软件”),它采用的是 沙盒机制,其程序文件是无法访问的(使用管理员账户也无法访问)。要打开这一应用,只有通过开始菜单的 All App 中的图标;要卸载这一应用,可以通过在 All App 中邮件选择卸载,或者在 Apps & Features 中,找到这一应用以后选择卸载。(Win32 程序的卸载方式可以通过 Program and Features,Modern App 不会在其中出现)

背景介绍完了以后,我来描述一下所遇到的问题。Oxford Dictionary 的安装文件的后缀名是 appxbundle,通过 dism /online /Add-ProvisionedAppxPackage 命令来安装。在 dism 的命令显示 “操作成功完成” 之后,发现在 All Apps 里面有了 Oxford Dictionary 的图标,但是在 Apps & Features 里面却没有发现 Oxford 这一项。这点十分蹊跷,看起来像是 Oxford 没有成功安装。
在 All Apps 里面点击 Oxford,发现应用的图标下面出现了类似进度条的物件,Oxford 词典无论如何都无法启动。问题出现了:Oxford Dictionary 无法安装!
但是,dism /online /Add-ProvisionedAppxPackage 不是显示 “操作成功完成” 了吗?于是,试图从 dism 的 log 中寻找原因。
dism.log 的路径是 C:\Windows\Logs\DISM\dism.log。打开这个日志后,发现所有的命令的执行结果都是 Info 或者 Warning 类型,没有 Error;而且 dism.log 也显示 Add-ProvisionedAppxPackage 命令成功完成。这条路被堵死了。

休息一下以后,回来再次思考这个问题。可以确定的是,Oxford Dictionary 一定没有安装成功,因为如果安装成功,那么一定可以启动这个应用。但是 dism.log 显示命令的执行是成功的。于是 debug 的思路是:能否找到比 dism.log 更详细的安装日志?

于是我请教了某一位同事,在他的帮助下,成功解决了这一问题!以下是解决步骤。

第一步,找到 “事件查看器” Event Viewer,保存 “Windows 日志” 下面的条目,例如:应用程序、系统等等。将这些日志保存下来,是为了做比较。所以,在安装 Oxford 之前,保存一次;在安装 Oxford 之后,再保存一次。这样就可以比较前后两次日志的不同之处了。

后来知道,其实,像 Oxford 之类的应用的安装日志在 系统 日志中。

第二步,使用 Beyond Compare,比较前后日志的不同。可以查找关键字如 “Oxford” 或者其他相关的关键字。

如下图所示,发现了不同之处。在 C:\Windows\Temp\AppXDeploymentServer_E33F44D0-B47D-0001-276B-3FE37DB4D101.evtx 中记录了与 Oxford 安装相关的日志。由此顺藤摸瓜,继续寻找原因。

第三步,根据进一步的分析,事件查看器中类似 Oxford 的安装日志的位置是 C:\Windows\System32\winevt\Logs\Microsoft-Windows-AppXDeploymentServer%4Operational.evtx,当然也可以直接在事件查看器的 Windows 日志下点击 系统 来查看。如下图所示是直接打开日志文件并且搜索 Oxford 的结果,这就是 比 dism.log 更详细的安装日志!

出错原因分析:其实出错原因很简单,在安装 Oxford Dictionary 时,需要指定 DependencyPackagePath。如果没有指定,而且目标机器上没有依赖的库文件的话,安装就会失败。这也解释了为什么在某些 Win10 机器上可以安装,而某些机器不可以。

完整的 Oxford Dictionary 安装命令,如下所示:

dism.exe /online /Add-ProvisionedAppxPackage /PackagePath:"c:\OxfordUniversityPressh.4488779F267

小结

通过这次问题解决的过程,知道 Windows 10 或者 Windows 8.1 的系统,使用 dism /online /Add-ProvisionedAppxPackage 命令会在 C:\Windows\Logs\DISM\dism.log 中生成日志。并且,更详细的日志,可以通过 事件管理器->Windows 日志->系统 来查看,或者打开 C:\Windows\System32\winevt\Logs\Microsoft-Windows-AppXDeploymentServer%4Operational.evtx 来查看。

后记

当时我去请教的同事,我们可以叫他 Robell。他对 dism,PowerShell,DOS Script,VB Script 等有比较深的造诣。在这之后不久,他离开了 HP。写这篇文章,也是为了顺便纪念他。^^

创作日期:7/29/2016 11:18:38 AM

如何获取比 dism.log 更详细的日志的更多相关文章

  1. 获取Tomcat更详细的日志

    前言 有时候tomcat报错未详细,未能定位到原因. 解决方法: 获取更详细的日志,以便调试. 详细步骤:   获取详细的日志,方法如下: 在WEB-INF/classes目录下logging.pro ...

  2. 微信小程序 报错 “对应的服务器无效。控制台输入 showRequestInfo()可以获取更详细信息”

    之前做的项目突然无法读出数据了,一测试发现报这个错误==>对应的服务器无效.控制台输入 showRequestInfo()可以获取更详细信息,后来发现是SSL证书到期了.重新申请了一个证书,免费 ...

  3. 获取异常具体信息 尤其是运行时异常例如NullPointerException 比e.getMessage()更详细

    ///打印异常信息 尤其是运行时异常 比getMessage()更详细public static String getMessageInfo(Exception e){ OutputStream op ...

  4. python3获取指定目录内容的详细信息

    不同平台获取指定目录内容的详细信息命令各不相同: Linux中可以通过ls -al获取获取 windows中可以通过dir命令获取 下面是我写的一个通用获取目录内容详细信息的python3脚本: #! ...

  5. Nginx配置中的log_format用法梳理(设置详细的日志格式)

    nginx服务器日志相关指令主要有两条:一条是log_format,用来设置日志格式:另外一条是access_log,用来指定日志文件的存放路径.格式和缓存大小,可以参加ngx_http_log_mo ...

  6. Linux /var/log下的各种日志文件详解

    1)/var/log/secure:记录登录系统存取数据的文件;例如:pop3,ssh,telnet,ftp等都会记录在此. 2)/var/log/wtmp:记录登录这的信息记录,被编码过,所以必须以 ...

  7. aliyun 日志服务(Log Service,Log)是针对日志场景的一站式服务

    日志服务(Log Service,Log)是针对日志场景的一站式服务,在阿里巴巴集团内部被广泛使用.用户无需开发就能快捷完成日志生命周期中采集.消费.投递以及查询功能. 日志服务当前提供如下功能 日志 ...

  8. Docker 1.13.0 详细更新日志

    本文讲的是Docker 1.13.0 详细更新日志[编者的话]Docker发布1.13.0版本,此次版本更新内容较多,以下为该版本具体的变更. 构建 添加在构建时可以指定镜像用作高速缓存源的功能. 这 ...

  9. SQLServer2005删除log文件和清空日志的方案

    数据库在使用过程中会使日志文件不断增加,使得数据库的性能下降,并且占用大量的磁盘空间.SQL Server数据库都有log文件,log文件记录用户对数据库修改的操作.可以通过直接删除log文件和清空日 ...

随机推荐

  1. 安装/删除MySQL数据库

    MySQL的数据存储目录为data,data目录通常在C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5 ...

  2. 简单动态字符串(SDS)

    SDS 前提:在redis中,C字符串只会作为字符串字面量用在一些无须对字符串进行修改的地方,比如打印日志: redisLog(REDIS_WARNING, “Redis is ready to ex ...

  3. __pycache__

    最近在使用python写一个串口模块的时候,偶然发现运行脚本之后,在工程文件夹下面出现了这样一个文件夹__pycache__,所以就特意到网上查了一下这个文件夹是怎么回事. 我们先在源文件中添加一些内 ...

  4. OKR群:为什么说每个程序员都应该有自己的个人OKR

    个人OKR OKR,即Object and Key Result,是IT大厂最近争相推广的目标管理工具,例如腾讯.百度和头条(字节跳动). 其实,OKR并不是仅仅只适用于公司和部门内部,我们个人也可以 ...

  5. vue 单页应用点击某个链接,跳转到新页面的方式

    <router-link class="goDetail" :to="{name: 'detail',params: {id:item.id}}" tar ...

  6. SpringMvc问题记录-Controller对于静态变量的访问分析

    问题描述 在于朋友的讨论中分析到一种场景,即:Controller对于一个类中的静态变量进行访问时,如果第一个接口修改该静态变量的数据,另外一个接口获取该静态变量的数据,那么返回的结果是什么? 操作步 ...

  7. 快学Scala 第十课 (包和包对象)

    Scala包定义: 嵌套式: package a1 { class a1Class{ val age = 10 } package a2 { class PackageTest { def main( ...

  8. 星之小说下载器Android版

    原本是想在酷安上架的,然而审核不通过..只能通过网页方式宣传了 一款使用Jsoup开源库网络爬虫的APP,将在线阅读的小说解析,把小说全本下载为txt文件 由于使用爬虫技术,所以下载的速度不是很理想, ...

  9. 05-03 主成分分析(PCA)

    目录 主成分分析(PCA) 一.维数灾难和降维 二.主成分分析学习目标 三.主成分分析详解 3.1 主成分分析两个条件 3.2 基于最近重构性推导PCA 3.2.1 主成分分析目标函数 3.2.2 主 ...

  10. Spring Boot 定时任务 @Scheduled

    项目开发中经常需要执行一些定时任务,比如在每天凌晨,需要从 implala 数据库拉取产品功能活跃数据,分析处理后存入到 MySQL 数据库中.类似这样的需求还有许多,那么怎么去实现定时任务呢,有以下 ...