我在将一个正在运行的应用程序更改为服务时出现问题,我认为它可能与AssemblyResolve
有关。
我的代码:
private static void Main()
{
SubscribeAssemblyResolver();
ExecuteApplication();
}
private static void SubscribeAssemblyResolver()
{
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
}
static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
var name = new AssemblyName(args.Name).Name;
if (name == "dllname")
{
return Assembly.LoadFrom(Path.Combine(instanceBinPath, name + ".dll"));
}
else
throw new FileNotFoundException();
}
private static void ExecuteApplication()
{
if (live)
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new Service1()
};
ServiceBase.Run(ServicesToRun);
}
else
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Testing());
}
}
正如你所看到的,我在构建时使用live bool将其从应用程序更改为服务进行测试,因此所有代码都是相同的但是当它运行时(安装正常)作为服务我得到了
无法加载DLL' tcxpscom_native':找不到指定的模块。 (来自HRESULT的异常:0x8007007E)异常。
AssemblyResolve
事件在服务时是否触发不同?或者代码是否应该移动到其他地方而不是在main()中调用?
更新
我对AppDomain.CurrentDomain.AssemblyResolve
事件进行了一些测试,发现我正在寻找的dll没有事件。
有任何建议为什么在作为服务运行时会发生这种情况但是作为应用程序正常工作?