C#自主更新

时间:2010-11-06 10:42:32

标签: c# assembly-resolution

在我的新项目中(windows-C#-vs2008)我希望可执行文件能够自动更新自己 - 也许是从网络服务器 这里我做的是将任何更新的dll下载到“隔离存储”(每个作为单独的dll)然后修改CurrentDomain_AssemblyResolve()方法

AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);

这样它在从可执行文件加载库之前首先检查其隔离存储库中是否存在库。 但是如果我想在主exe中改变一些东西呢? [我尝试创建一个加载器项目(控制台ap),它从中调用我的主程序(将输出更改为dll),但是这次程序集解析事件没有获得触发器,因为引用dll是在新加载器的bin文件夹下生成的编译期间的项目] 任何帮助都将受到高度赞赏..

public static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            try
            {
                string assemName = new AssemblyName(args.Name).Name;

                object i_StoreRootDir = i_StorageFile.GetType().GetField
                    ("m_RootDir", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(i_StorageFile);

                string i_StorePath = CombinePaths(i_StoreRootDir.ToString(), I_STOREDIR, assemName, DLL_EXT);

                if (File.Exists(i_StorePath))
                {
                    return Assembly.LoadFrom(i_StorePath);
                }
                else
                {
                    //load it from resource.
                    return null;
                }
            }
            catch (Exception)
            {
                throw;
            }

1 个答案:

答案 0 :(得分:1)

您可以查看ClickOnce deployment作为框架的一部分。您也可以结帐wyUpdate。还有BitsUpdater