我有一个应用程序,在DLL /文件上隐式打开句柄。在应用程序的某个时候,我想释放这个句柄。我该怎么做?我的应用程序是在C#中。如何通过C#释放句柄?
回答
使用PInvoke的,如果你有,你要关闭
[System.Runtime.InteropServices.DllImport("Kernel32")]
private extern static Boolean CloseHandle(IntPtr handle);
只需使用打开句柄的类的Dispose或Close方法即可。
我不知道一个简单的方法。过度的隐式文件锁定是我一直不喜欢Windows的东西。
如果您需要替换文件,MoveFileEx可以在下次启动时执行。您将使用它来重命名或删除原始文件,然后将其他文件重命名为它的位置。 http://msdn.microsoft.com/en-us/library/aa365240(VS.85).aspx http://www.pinvoke.net/default.aspx/kernel32/MoveFileEx.html
如果你不想使用API惹直接有MoveFile中的Sysinternals Suite这不相同:http://technet.microsoft.com/en-us/sysinternals/bb897556.aspx
或者你可以有其他程序访问文件时,你的程序ISN”运行。
如果你真的想要关闭句柄,那么如果.NET试图再次访问它,这很可能会导致你的程序崩溃,有办法获得每个进程的句柄列表。这不是很好,例子是C++: http://www.codeguru.com/forum/showthread.php?t=176997
你究竟在做什么?如果你想加载一个程序集来完成一些东西,然后完全卸载它,你需要依靠创建一个新的应用程序域。
public static void Main(string[] args)
{
AppDomain appDomain = AppDomain.CreateDomain("NewAppDomain");
appDomain.DoCallBack(new CrossAppDomainDelegate(AsmLoad));
// At this point, your assembly is locked, you can't delete
AppDomain.Unload(appDomain);
Console.WriteLine("AppDomain unloaded");
//You've completely unloaded your assembly. Now if you want, you can delete the same
}
public static void AsmLoad()
{
Assembly assembly = Assembly.LoadFrom(@"c:\Yourassembly.dll");
//Loaded to the new app domain. You can do some stuff here
Console.WriteLine("Assembly loaded in {0}",AppDomain.CurrentDomain.FriendlyName);
}
看一看这个职位更多,http://blogs.msdn.com/suzcook/archive/2003/07/08/57211.aspx
或者,如果你只担心 保持锁定了该文件,你可以使用 影子复制。这将在磁盘上复制文件 ,并从 加载新的位置。原始文件 将不会被该负载锁定。至 做到这一点,在创建AppDomain时设置为 将AppDomainSetup.ShadowCopyFiles设置为 ,或者在创建AppDomain时设置为 设置AppDomain.ShadowCopyFiles为true 。
- 1. 如何在java中释放句柄
- 2. 释放java文件句柄
- 3. 如何通过Codedom实现“句柄”
- 4. rsyslog不释放文件句柄
- 5. 释放注册表句柄更快
- 6. 谁在SetClipboardData(CF_BITMAP,HBITMAP)中释放句柄?
- 7. 石英不能释放文件句柄
- 8. OpenSSL不会释放文件句柄
- 9. GCHandle.Free()是否简单地释放句柄?
- 10. 通过函数句柄
- 11. 在自动生成过程中释放Windows文件句柄
- 12. 释放在C#中的OLE的IStorage文件句柄
- 13. 如何正确释放没有句柄的指定对象
- 14. 如何强制Nunit释放本机DLL上的句柄?
- 15. JavaFX 2.2 MediaPlayer:如何在Windows上释放媒体文件句柄
- 16. 如何释放COM手柄.NET
- 17. C++句柄wstring
- 18. 检查何时在Java中释放所有文件句柄
- 19. 何时应该释放原生(Android NDK)句柄?
- 20. Process.Kill是否释放诸如文件句柄之类的资源?
- 21. 如何释放它通过dispatch_once
- 22. 通过名称获取控制句柄
- 23. 通过句柄传递变量blockhelper
- 24. 通过PID获取进程句柄
- 25. 的Perl:通过文件句柄循环
- 26. 如何处理C++/CLI中的句柄?
- 27. 通过C++获取外部运行程序的窗口句柄
- 28. 如何通过句柄呈现基于索引的JSON数据?
- 29. 如何通过句柄从boost :: fibonacci_heap获取元素?
- 30. 如何通过连接手柄拿到语句处理?
什么有问题的文件是处理程序?它是资源还是引用程序集?你似乎知道为什么它被打开,这是它被用于什么时候以及什么时候被关闭的最大暗示。关心让我们进来? – 2009-08-04 06:36:04
一切280Z28说...加上“影子副本”;-p – 2009-08-04 06:43:42