在MSI安装程序

时间:2018-04-10 07:21:23

标签: c# .net windows-installer installer

我使用Accord.Video.FFMPEG.dll和Accord.Video.FFMPEG.x64.dll进行屏幕录制。实际上我想基于我已经做过的处理器来加载dll,这样做并且工作正常。

private static Assembly CustomResolve(object sender, ResolveEventArgs args)
{
    try
    {
        log.DebugFormat("{0}, {1}", args.Name, args.RequestingAssembly);
        string InstalledLocation = Assembly.GetExecutingAssembly().Location;
        InstalledLocation = InstalledLocation.Substring(0, InstalledLocation.LastIndexOf("\\"));
        if (Environment.Is64BitProcess)
            InstalledLocation = InstalledLocation + "\\x64\\Accord.Video.FFMPEG.x64.dll";
        else
            InstalledLocation = InstalledLocation + "\\x86\\Accord.Video.FFMPEG.dll";

        if (log.IsInfoEnabled) log.InfoFormat("Current Process envirnoment is {0}", Environment.Is64BitProcess);
        if (System.IO.File.Exists(InstalledLocation))
        {
            if (log.IsDebugEnabled) log.Debug("Loading " + InstalledLocation);
            return System.Reflection.Assembly.LoadFile(InstalledLocation);
        }
    }
    catch (Exception ex)
    {
        //EventLog.WriteEntry("IN Application Exception Create", ex.Message + "Trace" + ex.StackTrace, EventLogEntryType.Error, 121, short.MaxValue);
        log.ErrorFormat("Exception occured while loading the assembiles {0}, {1}", ex.Message, ex.StackTrace);
    }
    return null;
}

enter image description here

但我的问题是我必须将我的安装程序项目中的dll捆绑在一起,该项目目前是针对x86的。当我试图在安装程序的应用程序文件夹中添加此dll然后它抛出错误

  

错误:文件' Accord.Video.FFMPEG.x64.dll'定位' AMD64'与项目的目标平台&x; x86'不兼容   错误:文件' Accord.Video.FFMPEG.x64.dll'定位' AMD64'与项目的目标平台&x; x86'不兼容   警告:文件' Accord.Video.FFMPEG.x64.dll'定位' x64'与项目的目标平台&x; x86'不兼容   警告:文件' Accord.Video.FFMPEG.x64.dll'定位' x64'与项目的目标平台&x; x86'不兼容   构建过程已取消

1 个答案:

答案 0 :(得分:1)

这就是它的工作方式。不同的架构需要不同的包:

https://blogs.msdn.microsoft.com/heaths/2008/01/15/different-packages-are-required-for-different-processor-architectures/

因此,对于32位系统,您需要32位设置(仅包含32位组件)和64位设置,可以包含32位和64位组件:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa367451(v=vs.85).aspx

如果您支持的硬件只支持x86 32位,那么您的帖子就不清楚了,因为大多数现代硬件都是64位支持" legacy" x86应用程序。因此在我看来,您可能只需要一个安装两个Dll的64位版本。冒着明显的风险,您可能需要在64位计算机上仅支持32位和64位客户端,而不支持旧的仅限x86的硬件。