none
可以把载入的DLL用进程方式启动吗? RRS feed

答案

全部回复

  • 能更清晰的描述下你的问题么?你想问的是线程吧?

    2011年4月2日 5:25
  • 不是线程,是进程。 我想做的是创建一个新的进程,然后把载入的DLL在那新进程里运行
    2011年4月2日 6:31
  • DLL一般是被调用的资源,如果你想让他运行为什么不编译成EXE?

    不过你可以尝试用AppDomin类的createDomin()启动一个新的domin来加载这个dll。

    2011年4月2日 7:14
  • 不是线程,是进程。 我想做的是创建一个新的进程,然后把载入的DLL在那新进程里运行

    如果是exe的话,你可以直接调用process。start()来启动一个可执行文件。
    2011年4月2日 7:15
  • 本来就是EXE的,那些SB非要改他喵的DLL
    2011年4月2日 7:20
  • DLL在加载的时候可以运行一个dllmain,

    可以参考下这篇文章:http://msdn.microsoft.com/en-us/library/ms682583(v=vs.85).aspx

    个人建议你可以新建一个AppDomin然后加载这个dll,然后写一个dllmain运行你的dll。

    • 已标记为答案 A_Big_Mess 2011年4月2日 7:42
    2011年4月2日 7:29
  • 我试试吧,谢谢你的回复
    2011年4月2日 7:41
  • DllMain 这个东西在非托管 DLL 中默认存在,但在托管代码中引入 DllMain 会造成负面效应,比如在线程切换时,CLR 会重复执行被加载到线程中的 DLL 的 DllMain 函数。

    让 DLL 作为进程运行的方法是利用 Windows 的 Rundll32 或者 DllHost。Rundll32 用的比较多,如打开控制面板等。

    例子:

    Rundll32.exe shell32.dll,ShellAboutW

    可以显示关于 Windows 对话框,其本身作为一个进程 (rundll32) 运行。

    其实这也不是完全把 DLL 作为进程运行的,它只是做了一个宿主,让 DLL 在其进程空间内运行罢了。


    Mark Zhou
    2011年4月4日 10:17