写了一个WIN32控制台程序,该程序里调用GetCommandLineA() 获取当前进程的命令行,
可是在CMD下运行该程序时切换到当前进程的前几级目录下,然后输入该程序的相对路径名,去到的命令行是带相对路径,如何获取该进程的绝对路径呢?
我目前想到的解决方法:用GetCommandLineA() 获取命令行 判断如果是绝对路径则取到绝对路径进程退出;   如果判断是非绝对路径则调用GetCurrentDirectoryA 获取当前路径,然后把GetCommandLineA返回的结果字符串追加到当前路径后面则获取到,
请问:
1.还有什么其他方式么?有WIN32现成的API么?
2.由于控制台程序要开机自动运行,如何将控制台程序启动时自动进入后台执行类似LINUX下DAEMON进程那样?

解决方案 »

  1.   

    char buf[MAX_PATH]={0};
    ::GetModuleFileName(NULL, buf, MAX_PATH);
      

  2.   

    将你程序exe文件的路径注册到注册表中的HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run下就可以了
      

  3.   

    按照francsescoli(我爱世界杯) 的方法用GetModuleFileName函数可以获得本进程的绝对路径,可是我将本进程写到注册表:
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run下,机器重新启动后我的程序自动运行后还是会显示控制台窗口,添加注册表代码如下:
    HKEY hkey;
    RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", &hkey);
    RegSetValueExA(hkey, "testkey", 0, REG_SZ, "绝对路径\\mytest.exe", strlen(""绝对路径\\mytest.exe""));
    RegCloseKey(hkey);
    请问如何不显示控制台窗口呢?
      

  4.   

    你先写个壳,这个壳就是启动你现在的这个主程序,但是必须是以不显示窗口的模式启动的,把那个壳放到注册表中,让它先启动。这样不就很想linux的deamon了吗?
      

  5.   

    如果想做成自动运行的还可以用服务的方式来做。这个壳里可以用
    面是一个MSDN中的小例子,用的是createprocess 
    void main( VOID ) 

    STARTUPINFO si; 
    PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); 
    si.cb = sizeof(si); 
    ZeroMemory( &pi, sizeof(pi) ); // 创建子进程 
    if( !CreateProcess( NULL, // No module name (use command line). 
    "MyChildProcess", // Command line. 
    NULL, // Process handle not inheritable. 
    NULL, // Thread handle not inheritable. 
    FALSE, // Set handle inheritance to FALSE. 
    0, // No creation flags. 
    NULL, // Use parent's environment block. 
    NULL, // Use parent's starting directory. 
    &si, // Pointer to STARTUPINFO structure. 
    &pi ) // Pointer to PROCESS_INFORMATION structure. 


    ErrorExit( "CreateProcess failed." ); 
    } } 
      

  6.   

    xazl(西北狼) 的意思是要写个BAT文件 里面执行我的控制台程序,然后把这个BAT放到注册表自动运行里?
      

  7.   

    把控制台程序改为win32 application
      

  8.   

    按照flyelf(空谷清音) 的做法实验了 没有控制台界面了 多谢了 散分