之前做了一个exe,但是在另一个程序里面我想调用这个exe,但是不想让别人知道这是个exe,然后就改成了dll(或其它后缀的文件),可是用Process.Start的时候会发现找不到关联的程序来打开,请问有什么方法呢?

解决方案 »

  1.   

    如果都是.net的程序,可以不必使用Process的Start来启动这个EXE,而是使用Assembly的加载方法来加载这个EXE(VS2005中或.net2.0),然后像使用一般的DLL类型库中的类一样来声明EXE程序中的主窗体的变量然后使用ShowDialog等方法来启动就可以了。
      

  2.   

    Process可以指定相应程序打开你要的东西。
    比如Cmd.exe
      

  3.   

    谢谢hbxtlhx,
    这个exe文件不是C#写的,这个文件没有什么主窗体,就像是一个控制台应用程序一样,通过参数控制来运行的,
    并且我是在后台的方式来运行的,并不需要显示出东西(也不希望显示出来).
      

  4.   

    回ms44:主要的后缀已经改成非exe结尾的了,如果是exe的话是没问题的
      

  5.   

    如果是托管的EXE你可以试试这样
    Assembly assem= Assembly.LoadFrom(YourProPath);
    Type tExForm = assem.GetType(YourTypeName);
    Object exFormAsObj = Activator.CreateInstance(tExForm);
    .....
      

  6.   

    这样子说吧,将 c:\windows\system32下的notepad.exe(记事本)改成notepad.dll
    然后运行->cmd:cd 到system32目录,再输入notepad.dll回车,系统会运行他,并且是像运行notepad.exe一样打开记事本,我也想这样,要怎么样才可以呢? 
      

  7.   

    没有什么好办法,如果是非exe文件,就需要有关联程序的,
    我的解决办法:1、把exe文件改成其它任何扩展名,
    2、要调用这个程序时,把原来改的名的文件,复制一份是exe扩展名的文件,可以放到其它隐蔽的文件夹下,
    3、调用这个文件
    4、程序退出时,删除这个exe文件,
      

  8.   

    Try:Process.Start("rundll32.exe xxx.dll");
      

  9.   

    不知道LZ是怎么重命名notepad.exe,因为一旦在资源管理器里面重命名,马上Windows就会生成一个notepad.exe的东西在里面。所以你自认为重命名之后执行的是dll,其实乃是运行的Windows给你恢复的exe。至于你的问题,应该不难。复制一个dll,然后重命名他为exe结尾,然后运行这个exe好了。如果需要删除这个临时的exe,那么就监视一下exe的进程了,一旦进程结束就删除exe。
      

  10.   

    其实很简单的. 比如 一个.EXE后缀的程序,修改为.ttt后缀了.一样可以启动.启动之后还是一个exe文件.
    只不过在进程中显示的是XXX.ttt