【问题标题】:WiX - Writing new file from Custom ActionWiX - 从自定义操作写入新文件
【发布时间】:2011-04-22 20:29:50
【问题描述】:

我有一个 C# 自定义操作,它加载一个 XML 文档并对其内容进行一些更改。

当我在我的 Windows 7 32 位工作站上运行它时,没有创建新的 XML 文档。当我在 Windows Server 2003 VM 上测试安装程序时,CA 按预期工作并将 XML 文档保存在安装目录中。

string configFile = Path.Combine(configFileSaveLocation, targetName);
StreamWriter writer = new StreamWriter(configFile);
doc.Save(writer);
writer.Close();

其中 'doc' 是一个 XmlDocument。

如果我将以上 4 行放在 try/catch 块中,则不会捕获到异常。

对我缺少什么有什么想法吗?

【问题讨论】:

  • 可能是权限问题。 Windows 7 配备了 UAC。你确定没有例外?此外,您应该尝试用“使用”语句包围 StreamWriter。
  • 它也可能将文件保存到意外位置。 configFileSaveLocation 是如何定义的?
  • 为什么不使用标准的 XmlConfig 或 XmlFile 元素?他们在后台解决了大多数此类问题......
  • 您是否尝试将模拟设置为“否”?
  • 我的第一个想法也是,这是一个 UAC 问题。但是,当我添加 try/catch 并在调试器中运行它时,没有引发任何安全异常。

标签: c# wix


【解决方案1】:

由于 Impersonate="No" 成功了,这显然是权限问题。但仅此一点就无法解释缺乏异常。 Windows Vista 和更高版本会将某些类型的错误文件访问重定向到%LocalAppData%\VirtualStore\Program Files*。我敢打赌,如果你看那里而不是真正的Program Files*,你会看到你的配置文件。

在研究这一点时,我刚刚学到了一种简单的方法,即查看真实文件夹并单击资源管理器中的Compatibility files 按钮;该按钮仅在相关时出现。有关详细信息,请参阅 Common file and registry virtualization issues in Windows Vista or in Windows 7 上的场景 2。

【讨论】:

  • 不错!和你描述的完全一样。
猜你喜欢
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多