CheckIfInstallable method locks the file

  • Thread starter Thread starter Stefano
  • Start date Start date
S

Stefano

Hi all,
when I try to use the CheckIfInstallable method of
System.Configuration.Install.AssemblyInstaller on a file not installable, I
correctly get an exception, but then the file checked remains locked by the
application until I close the program (e.g. I can't delete the file or
overwrite it).

Why the file remains locked? Is there a way to avoid it?
 
It is because Assembly.Load is run on the file (the assembly gets loaded
into your appdomain).

You can see this in the Path setter it uses

set
{
if (value == null)
{
this.assembly = null;
}
this.assembly = Assembly.LoadFrom(value);
}



This will hold a lock on the file until the appdomain is killed.

No way to work around this I'm afraid except to wait until the appdomain is
dead to delete the file.
Cheers,

Greg Young
MVP - C#
http://codebetter.com/blogs/gregyoung
 
Greg said:
It is because Assembly.Load is run on the file (the assembly gets loaded
into your appdomain).

You can see this in the Path setter it uses

set
{
if (value == null)
{
this.assembly = null;
}
this.assembly = Assembly.LoadFrom(value);
}



This will hold a lock on the file until the appdomain is killed.

No way to work around this I'm afraid except to wait until the appdomain is
dead to delete the file.
So, to help the OP, he could:
1) Create a second AppDomain
2) Load either his existing code assembly or just a simple stub one in
3) Create a class in the second domain
4) Call a method on that class which performs the original
CheckIfInstallable check and returns a boolean
5) Unload the second AppDomain

correct?

Damien
 
Ok, thanks to everybody, I've called the method from a second AppDomain and
everything worked!
 
Back
Top