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?

Re: CheckIfInstallable method locks the file by Greg

Greg
Tue Jul 04 18:21:45 CDT 2006

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

"Stefano" <no@no.it> wrote in message
news:e9KYJ77nGHA.2264@TK2MSFTNGP04.phx.gbl...
> 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?
>



Re: CheckIfInstallable method locks the file by Greg

Greg
Tue Jul 04 18:26:39 CDT 2006

I would put this up as a suggestion

Cheers,

Greg Young
MVP - C#
http://codebetter.com/blogs/gregyoung

"Greg Young" <druckdruckREMOVEgoose@hotmail.com> wrote in message
news:eM24eC8nGHA.4736@TK2MSFTNGP02.phx.gbl...
> 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
>
> "Stefano" <no@no.it> wrote in message
> news:e9KYJ77nGHA.2264@TK2MSFTNGP04.phx.gbl...
>> 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?
>>
>
>



Re: CheckIfInstallable method locks the file by Damien

Damien
Wed Jul 05 01:51:03 CDT 2006

Greg Young wrote:
> 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


Re: CheckIfInstallable method locks the file by Stefano

Stefano
Wed Jul 05 04:09:05 CDT 2006

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

"Damien" <Damien_The_Unbeliever@hotmail.com> wrote in message
news:1152082263.593621.226570@p79g2000cwp.googlegroups.com...
> Greg Young wrote:
>> 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
>