zoukankan      html  css  js  c++  java
  • C# CreateProcess的测试

    很奇怪的一个现象,在C#中使用Process来启动进程,启动文件名必须是系统指定的扩展名.EXE,而我使用原生的Win32API ::CreateProcess ()并没有这个限制,以后遇到类似的问题要注意了

    下面例子:com.aaa,com.exe都是同一个可执行文件,只是扩展名不一样

     [TestMethod()]        
    public void Simple1111_Test()       
    {
                var process = new System.Diagnostics.Process();            
                process.StartInfo.FileName = @"e:com.aaa";
                var bb = process.Start();
    }


    运行失败,但是下面的测试

     [TestMethod()]        
    public void Simple1111_Test()       
    {
                var process = new System.Diagnostics.Process();            
                process.StartInfo.FileName = @"e:com.exe";
                var bb = process.Start();
    }

    运行成功

    下面用原生的WIN32API测试Com.aaa

    STARTUPINFO si = { sizeof(si) };       
    PROCESS_INFORMATION pi;      
    si.dwFlags = STARTF_USESHOWWINDOW;       
    si.wShowWindow = TRUE;     
    BOOL bRet = ::CreateProcess (    TEXT("e:\Com.aaa"),  
        NULL,   NULL,     NULL,    FALSE,    
        CREATE_NEW_CONSOLE,    NULL,    
        NULL,    &si,    &pi);       
    int error = GetLastError();   

    这个又成功了
    说明内核没有检测执行文件的扩展名,而.Net库Process类做了检测 

  • 相关阅读:
    javaweb
    反射 day1
    JDBC-day1
    总结
    day5
    day4
    day3
    18.10.17 考试总结
    洛谷P2172 [bzoj] 2150 部落战争
    18.10.15 考试总结
  • 原文地址:https://www.cnblogs.com/stst/p/4908454.html
Copyright © 2011-2022 走看看