C#自主更新
在我的新项目(windows-C#-vs2008)中,我希望可执行文件能够自动更新自己——可能是从网络服务器更新 这里我要做的是将任何更新的DLL下载到“独立存储”(每个DLL都是独立的DLL),然后修改CurrentDomain_AssemblyResolve()方法 这样,在从可执行文件加载库之前,它首先检查其独立存储中是否存在库。 但是,如果我想更改主exe中的某些内容,该怎么办。 [我尝试创建一个加载程序项目(控制台ap),它从中调用我的主程序(更改输出为dll),但是这次程序集解析事件没有触发,因为在编译过程中,引用dll是在新加载程序项目的bin文件夹下生成的] 任何帮助都将不胜感激C#自主更新,c#,assembly-resolution,C#,Assembly Resolution,在我的新项目(windows-C#-vs2008)中,我希望可执行文件能够自动更新自己——可能是从网络服务器更新 这里我要做的是将任何更新的DLL下载到“独立存储”(每个DLL都是独立的DLL),然后修改CurrentDomain_AssemblyResolve()方法 这样,在从可执行文件加载库之前,它首先检查其独立存储中是否存在库。 但是,如果我想更改主exe中的某些内容,该怎么办。 [我尝试创建一个加载程序项目(控制台ap),它从中调用我的主程序(更改输出为dll),但是这次程序集解析事件
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;
}
作为框架的一部分,您可以查看。你也可以结帐。还有。很抱歉,我在应用程序中使用了许多注册表更新和注册表修改,我认为Clickonce不是一个好办法。
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;
}