Unicode 无法将带有自定义操作的MSI安装到用户名中带有非ascii字符的非管理员
这是一个我已经与之斗争了几天的问题,现在我束手无策。我正在用Wise Installation Studio创建一个MSI,但我敢打赌它可以用任何MSI创作程序重新制作。我已经为那个些希望使用我发布的MSI、DLL或WSI文件重新编程的人创建了一个测试样本Unicode 无法将带有自定义操作的MSI安装到用户名中带有非ascii字符的非管理员,unicode,windows-installer,custom-action,non-admin,Unicode,Windows Installer,Custom Action,Non Admin,这是一个我已经与之斗争了几天的问题,现在我束手无策。我正在用Wise Installation Studio创建一个MSI,但我敢打赌它可以用任何MSI创作程序重新制作。我已经为那个些希望使用我发布的MSI、DLL或WSI文件重新编程的人创建了一个测试样本 创建一个新的wise解决方案,另存为“test.wsi”并创建“test.msi” 除了在“UI序列”中的MigrateFeaturesState操作之后添加两个自定义操作外,不对该文件执行任何操作 第一个自定义操作是“从安装调用DLL”,它
Aaron P
我认为问题是由这些DLL的处理方式引起的。安装中的DLL存储在二进制表中,并在安装过程中自动提取。它是本地的,所以它可以正常工作
从安装中调用自定义DLL很可能在安装过程中使用不正确的路径来提取DLL。它可能是非管理员用户无法访问的每台计算机的位置尝试使用支持Unicode字符的代码页构建MSI(您可以设置MSI语言)。另外,尝试创建日志并发布实际的DLL路径。我认为问题是由处理这些DLL的方式引起的。安装中的DLL存储在二进制表中,并在安装过程中自动提取。它是本地的,所以它可以正常工作 从安装中调用自定义DLL很可能在安装过程中使用不正确的路径来提取DLL。它可能是非管理员用户无法访问的每台计算机的位置
尝试使用支持Unicode字符的代码页构建MSI(您可以设置MSI语言)。另外,尝试创建日志并发布实际的DLL路径。MSI的代码页不太可能有帮助。这些操作的工作方式是帮助器操作(由Wise提供)提取dll,然后使用不同于Windows Installer约定的约定调用dll。不幸的是,该粘合dll似乎是由ANSI构建的,无法处理当前临时路径上的非ANSI字符。唯一可能的解决方案是将您的dll重新实现为与Windows Installer兼容的dll,这样就不需要粘合dll。您可能认为设置MSI的代码页可以解决此问题,但我们无法向客户提供此解决方案。我发现一个类似的解决方法是将“非unicode程序的语言”设置为用户名的语言,这样可以解决这个问题。这是一个很好的工作,但我想尝试更好的@MichaelU:是的,我感到很沮丧,我将不得不重写我所有的DLL。你对问题的描述与我所做的所有调查都一致。我想看看ne1是否有另一个选项b4我关闭此MSI的代码页不太可能有帮助。这些操作的工作方式是帮助器操作(由Wise提供)提取dll,然后使用不同于Windows Installer约定的约定调用dll。不幸的是,该粘合dll似乎是由ANSI构建的,无法处理当前临时路径上的非ANSI字符。唯一可能的解决方案是将您的dll重新实现为与Windows Installer兼容的dll,这样就不需要粘合dll。您可能认为设置MSI的代码页可以解决此问题,但我们无法向客户提供此解决方案。我发现一个类似的解决方法是将“非unicode程序的语言”设置为用户名的语言,这样可以解决这个问题。这是一个很好的工作,但我想尝试更好的@MichaelU:是的,我感到很沮丧,我将不得不重写我所有的DLL。你对问题的描述与我所做的所有调查都一致。我想看看ne1是否有另一个选项b4我关闭这个