无法使用自定义操作将MSI安装到用户名中包含非ascii字符的非管理员

这是我几天来一直在努力解决的一个问题,现在我的智慧结束了。我正在使用Wise Installation Studio创建一个MSI,但我敢打赌它可以用任何MSI创作程序重新编写。我已经为那些希望使用我发布的MSI,DLL或WSI文件重新编译的人创建了一个测试样本。 创建一个新的明智的解决方案,保存为'test.wsi'并创建'test.msi' 除了在“UI序列”中的MigrateFeaturesState操作之后添加两个自定义操作外,不对此文件执行任何操作 第一个自定义操作是“从安装调用DLL”,它不传递任何参数并忽略返回代码 第二个自定义操作是“从安装调用自定义DLL”,它不传递任何参数并忽略返回代码 这两个动作引用相同的DLL和相同的函数,helloworld.dll和HelloWorld()函数只显示一个'HelloWorld'消息框 预期结果: 两个hello world提示然后在常规UI屏幕上启动安装过程。 这是我目前的设置: 开发箱: - Wise Installation Studio 7.4.0.214 - 关闭UAC运行Win7 x64, 测试盒: - Windows XP SP3 - Windows Installer v4.5.6001.22159 - .Net Framework v4.0 这是我的测试用例: 使用ascii用户名的非管理员 - 结果与“ALLUSERS =”“和ALLUSERS =”1“的预期一样 管理员名称为“あくぇえ”的unicode字符 - 结果与“ALLUSERS =”“和ALLUSERS =”1“的预期相同 名为'发涩'的非管理员名称为unicode - 仅出现第一个提示,第二个提示错误如下: “自定义操作出错。库C: Documents and Settings ?? [LongAlphaNumericString] .TMP WiseCustomCalla.dll无效或无法找到。” “ALLUSERS =”“和ALLUSERS =”1“都会发生这种情况 使用其他管理员登录并将#3中的用户设置为admin,再次使用#3中的用户登录,我们会得到预期的结果。 我已经尝试过强制短路径并传递到用户数据文件夹的备用路径,但没有任何作用。任何人都知道为什么会这样,以及如何解决它? 我在这里包含了我用于此测试的所有文件,其中包括错误消息的屏幕截图,msi和msi.xml,wsi文件,helloworld.dll(使用rundll32 helloworld.dll测试,HellowWorld)和上面每个测试用例的日志。 http://dl.dropbox.com/u/1797288/error.zip 需要在MSI / WSI文件中进行哪些更改才能使#3正常运行“从安装调用自定义DLL”操作? 谢谢, 亚伦P.     
已邀请:
我认为问题是由这些DLL的处理方式引起的。安装中的DLL存储在二进制表中,并在安装期间自动提取。它是原生的,所以它按预期工作。 从安装调用自定义DLL很可能使用不正确的路径在安装期间提取DLL。它可能是非管理员用户无法访问的每台计算机位置。 尝试使用支持Unicode字符的代码页构建MSI(您可以设置MSI语言)。此外,尝试创建日志并发布实际的DLL路径。     

要回复问题请先登录注册