2

这是我几天来一直在努力解决的问题,现在我束手无策。我正在使用 Wise Installation Studio 创建一个 MSI,但我敢打赌它可以使用任何 MSI 创作程序进行复制。我为那些希望使用我发布的 MSI、DLL 或 WSI 文件进行复制的人创建了一个测试样本。

  1. 创建一个新的明智解决方案,保存为“test.wsi”并创建“test.msi”
  2. 除了在“UI 序列”中的 MigrateFeaturesState 操作之后添加两个自定义操作之外,对该文件不执行任何操作
  3. 第一个自定义操作是“从安装调用 DLL”,不传入任何参数并忽略返回码
  4. 第二个自定义操作是“从安装调用自定义 DLL”,不传入任何参数并忽略返回码
  5. 两个动作都引用相同的 DLL 和相同的函数,helloworld.dll 和只显示“HelloWorld”消息框的 HelloWorld() 函数

预期结果:两个 hello world 提示,然后是常规 UI 屏幕以开始安装过程。

这是我当前的设置: Development Box: - Wise Installation Studio 7.4.0.214 - Win7 x64 在 UAC 关闭的情况下运行,

测试盒: - Windows XP SP3 - Windows Installer v4.5.6001.22159 - .Net Framework v4.0

这是我的测试用例:

  1. 具有 ascii 用户名的非管理员 - 'ALLUSERS=""' 和 ALLUSERS="1" 的结果都符合预期
  2. 名称为 'あくぇえ' 的管理员具有 unicode 字符 - 'ALLUSERS=""' 和 ALLUSERS="1" 的结果均符合预期
  3. 名称中带有 unicode 字符的非管理员“发涩” - 仅出现第一个提示,第二个提示如下所示:“自定义操作出错。库 C:\Documents and Settings\??[LongAlphaNumericString]。 TMP\WiseCustomCalla.dll 无效或找不到。” 'ALLUSERS=""' 和 ALLUSERS="1" 都会发生这种情况
  4. 使用另一个管理员登录并将#3中的用户设置为管理员,再次使用#3中的用户登录,我们得到了预期的结果。

我尝试过强制使用短路径并将备用路径传递给用户数据文件夹,但没有任何效果。任何人都知道为什么会发生这种情况以及如何解决它?我在这里包含了我用于此测试的所有文件,其中包括错误消息的屏幕截图、msi 和 msi.xml、wsi 文件、helloworld.dll(使用 rundll32 helloworld.dll、HellowWorld 进行测试)和上面每个测试用例的日志。

http://dl.dropbox.com/u/1797288/error.zip

需要在 MSI/WSI 文件中进行哪些更改,以便 #3 正确地用于“从安装中调用自定义 DLL”操作?

谢谢,亚伦P

4

1 回答 1

0

我认为问题是由这些 DLL 的处理方式引起的。来自安装的 DLL 存储在二进制表中,并在安装过程中自动提取。它是本机的,因此可以按预期工作。

从安装中调用自定义 DLL 很可能在安装期间使用不正确的路径来提取 DLL。它可能是非管理员用户无法访问的每台计算机位置。

尝试使用支持 Unicode 字符的代码页构建 MSI(您可以设置 MSI 语言)。另外,尝试创建一个日志并发布实际的 DLL 路径。

于 2011-02-15T08:06:02.183 回答