要释放DLL,我们在调用DLL时使用如下所示的“?u”。
System::Call "Launch.dll::IsDriverPresent() i.r0 ?u"
类似地,有没有办法在使用后释放或卸载exe及其依赖项?
因为有时在卸载后,已安装目录中的可执行文件及其依赖项仍然存在。
下面是我们用来调用Exec的行:
Exec '"$INSTDIR\ValidateDriver.exe" ON'
答案 0 :(得分:0)
否,您不能卸载.EXE。一个.EXE将被锁定,直到其最终线程结束并且所有线程的所有句柄和进程本身都已关闭。
如果您杀死/终止了该进程,但该进程仍被锁定,则很可能是某些防病毒软件仍在对该文件进行锁定。
您可以循环调用...
<Application.Resources>
<myns:SvgIcon x:Key="MyIcon" Data="...PathData..." />
...
/*Default Icon Style*/
<Style TargetType="myns:SvgIcon">
<Setter Property="Foreground" Value="Black" />
</Style>
/*Style icons used as content*/
<Style TargetType="Control" x:Key="BlueIcon">
<Style.Resources>
<Style TargetType="myns:SvgIcon" BasedOn="{StaticResource {x:Type myns:SvgIcon}}">
<Setter Property="Foreground" Value="Blue" />
</Style>
</Style.Resources>
</Style>
...
</Application.Resources>
...
和...
<MenuItem Header="Do Stuff" Icon="{StaticResource MyIcon}" Style="{StaticResource BlueIcon}" />
...
<StackPanel>
<Label Content="{StaticResource MyIcon}" Style="{StaticResource BlueIcon}" />
<Button Content="{StaticResource MyIcon}" Style="{StaticResource BlueIcon}" />
</StackPanel>
...
,重试10秒钟左右后,您可能不得不放弃或向用户显示MessageBox。