求助高手解决一小问题,在线等,分不够再加,满意立即结贴

时间:2021-02-11 21:29:23
现有一VC控制台程序client.exe,是一个机房监控的客户端,运行的时候窗口会停留几秒,现在想让这个程序开机后在后台运行,不出现程序窗口,目前的解决办法是通过一个VBS脚本来启动程序,双击VBS文件确实可以不显示窗口的运行client.exe程序,但是将这个vbs拖到 C:\Documents and Settings\All Users\「开始」菜单\程序\启动 后,重启开机发现client.exe程序没有运行,求解决办法。只要能让这个client.exe开机自启动,看不到窗口就行,在线等,我说过分不是问题,不够可以再加!

20 个解决方案

#1


楼主,请问你的client.exe是SDI,MDI还是DLG?
可以修改client的代码吗?
可不可以自己写一个exe在启动里来启动那个vbs的?

#2


回1楼,写一个exe来启动这个vbs我也考虑过,但是一想这不是转了几道弯,这是要在客户端部署的,有600多台机器,当然是越简单越好,是在没别的办法也只好这样了,等高手!!

#3


可不可以写一个exe来启动你的client.exe,
然后让将exe放到开机自启动目录里
不要VBS了

#4


引用 3 楼 hzy694358 的回复:
可不可以写一个exe来启动你的client.exe,
然后让将exe放到开机自启动目录里
不要VBS了

写一个exe来启动client.exe?这倒是个新想法,只要是让client.exe启动的时候看不到界面,是在后台运行就行,楼上有具体的办法吗

#5


要开机自动运行的话只能在注册表里来实现吧,把你的程序路径写入注册表自动运行这一项就行了

#6


ShellExecute指定SW_HIDE能不能达到效果?

#7


引用 6 楼 jingzhongrong 的回复:
ShellExecute指定SW_HIDE能不能达到效果?

不是太懂,能说的明白点吗,client.exe是VC的一个控制台程序,现在不想改了,就是想让它开机自启动,并且是在后台,看不到窗口!

#8


client.exe文件修改一下启动的时候不出窗口不就行了?

#9


引用 7 楼 buqitianxie 的回复:
引用 6 楼 jingzhongrong 的回复:
ShellExecute指定SW_HIDE能不能达到效果?

不是太懂,能说的明白点吗,client.exe是VC的一个控制台程序,现在不想改了,就是想让它开机自启动,并且是在后台,看不到窗口!


就是再弄一程序来用这个函数来启动你的程序,参数sw——hide就隐藏你的窗口了

#10


!!!

#11


添加让程序开机自动启动的注册的代码,网上有你可以搜一下,然后程序就能够开机自动启动,然后在你的程序中添加代码隐藏窗口就可以了

#12


添加让程序开机自动启动的注册的代码,网上有你可以搜一下,然后程序就能够开机自动启动,然后在你的程序中添加代码隐藏窗口就可以了

#13


我不是做vc的,能不能帮我改下,程序的核心代码如下:
#include "stdafx.h"
#include <iostream>
#include <UrlMon.h>
#pragma comment(lib, "urlmon.lib")
using namespace std;
int main(int argc, char* argv[])
{
 cout<<"此界面为机房管理系统客户端,正在与主机通信......请耐心等待数秒,谢谢合作!"<<endl;
 
HRESULT hr= ::URLDownloadToFile(NULL,"http://www.baidu.com/index.htm","d:\\123.htm",0,NULL); 
// HRESULT hr = URLDownloadToFile(NULL,"http://www.baidu.com","d:\\file.exe",0,NULL);
 if (hr == S_OK)
 {
 cout<<"download ok"<<endl;
 }
 else
 {
 cout<<"download fail"<<endl;
 }
return 0;
}


怎样让它运行不显示窗口?

#14


开始\运行\输入"msconfig"\启动\关闭多余的启动项就可以了.

在注册表上修改:

查看“自启动”程序
 
绝大多数“自启动”程序都是通过注册表加载的,而它们在“开始/程序/启动”菜单中是看不到的。这时,你可以选择“本地机器上的HKEY_LOCAL_MACHINE”子窗口,定位到HKEY_LOCAL_MACHINE\Software\Microsoft\

Windows\CurrentVersion\Run分支查看,也可以删除右边窗口中的一些键值而达到禁止某些程序自启动的目的。
 
开始\运行\输入"regedit"\打开注册表. 

#15


//以下的代码用来执行dos命令且不显示窗口   
    
  #include   <windows.h>   
  #include   <stdio.h>   
    
  #define   EXECDOSCMD   "ping   www.csdn.net"     
  //替换成其他的也可以   比如你要求得"client.exe"; 
    
  BOOL   ExecDosCmd()   
  {   
  SECURITY_ATTRIBUTES   sa;   
  HANDLE   hRead,hWrite;   
    
  sa.nLength   =   sizeof(SECURITY_ATTRIBUTES);   
  sa.lpSecurityDescriptor   =   NULL;   
  sa.bInheritHandle   =   TRUE;   
  if   (!CreatePipe(&hRead,&hWrite,&sa,0))     
  {   
  return   FALSE;   
  }     
    
  STARTUPINFO   si;   
  PROCESS_INFORMATION   pi;     
  si.cb   =   sizeof(STARTUPINFO);   
  GetStartupInfo(&si);     
  si.hStdError   =   hWrite;   
  si.hStdOutput   =   hWrite;   
  si.wShowWindow   =   SW_HIDE;   
  si.dwFlags   =   STARTF_USESHOWWINDOW   |   STARTF_USESTDHANDLES;   
  //关键步骤,CreateProcess函数参数意义请查阅MSDN   
  if   (!CreateProcess(NULL,   EXECDOSCMD   
  ,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))     
  {   
  return   FALSE;   
  }   
  CloseHandle(hWrite);   
    
  char   buffer[4096]   =   {0};   
  DWORD   bytesRead;     
  while   (true)     
  {   
  if   (ReadFile(hRead,buffer,4095,&bytesRead,NULL)   ==   NULL)   
  break;   
  //buffer中就是执行的结果,可以保存到文本,也可以直接输出   
  printf(buffer);//这行注释掉就可以了   
  Sleep(200);     
  }     
  return   TRUE;   
  }   
    
  int   main(int   argc,   char*   argv[])   
  {   
  ExecDosCmd();   
  return   0;   
  }   

#16


将你的代码加入到main中应该就可以了

#17


11楼正解

#18


问题解决了,结贴!

#19


加入这段代码:
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
详细:http://zergb.spaces.live.com/blog/cns!C417B6C5A59504CE!548.entry

#20


对不起19楼了,就是这种办法解决的!抱歉

#1


楼主,请问你的client.exe是SDI,MDI还是DLG?
可以修改client的代码吗?
可不可以自己写一个exe在启动里来启动那个vbs的?

#2


回1楼,写一个exe来启动这个vbs我也考虑过,但是一想这不是转了几道弯,这是要在客户端部署的,有600多台机器,当然是越简单越好,是在没别的办法也只好这样了,等高手!!

#3


可不可以写一个exe来启动你的client.exe,
然后让将exe放到开机自启动目录里
不要VBS了

#4


引用 3 楼 hzy694358 的回复:
可不可以写一个exe来启动你的client.exe,
然后让将exe放到开机自启动目录里
不要VBS了

写一个exe来启动client.exe?这倒是个新想法,只要是让client.exe启动的时候看不到界面,是在后台运行就行,楼上有具体的办法吗

#5


要开机自动运行的话只能在注册表里来实现吧,把你的程序路径写入注册表自动运行这一项就行了

#6


ShellExecute指定SW_HIDE能不能达到效果?

#7


引用 6 楼 jingzhongrong 的回复:
ShellExecute指定SW_HIDE能不能达到效果?

不是太懂,能说的明白点吗,client.exe是VC的一个控制台程序,现在不想改了,就是想让它开机自启动,并且是在后台,看不到窗口!

#8


client.exe文件修改一下启动的时候不出窗口不就行了?

#9


引用 7 楼 buqitianxie 的回复:
引用 6 楼 jingzhongrong 的回复:
ShellExecute指定SW_HIDE能不能达到效果?

不是太懂,能说的明白点吗,client.exe是VC的一个控制台程序,现在不想改了,就是想让它开机自启动,并且是在后台,看不到窗口!


就是再弄一程序来用这个函数来启动你的程序,参数sw——hide就隐藏你的窗口了

#10


!!!

#11


添加让程序开机自动启动的注册的代码,网上有你可以搜一下,然后程序就能够开机自动启动,然后在你的程序中添加代码隐藏窗口就可以了

#12


添加让程序开机自动启动的注册的代码,网上有你可以搜一下,然后程序就能够开机自动启动,然后在你的程序中添加代码隐藏窗口就可以了

#13


我不是做vc的,能不能帮我改下,程序的核心代码如下:
#include "stdafx.h"
#include <iostream>
#include <UrlMon.h>
#pragma comment(lib, "urlmon.lib")
using namespace std;
int main(int argc, char* argv[])
{
 cout<<"此界面为机房管理系统客户端,正在与主机通信......请耐心等待数秒,谢谢合作!"<<endl;
 
HRESULT hr= ::URLDownloadToFile(NULL,"http://www.baidu.com/index.htm","d:\\123.htm",0,NULL); 
// HRESULT hr = URLDownloadToFile(NULL,"http://www.baidu.com","d:\\file.exe",0,NULL);
 if (hr == S_OK)
 {
 cout<<"download ok"<<endl;
 }
 else
 {
 cout<<"download fail"<<endl;
 }
return 0;
}


怎样让它运行不显示窗口?

#14


开始\运行\输入"msconfig"\启动\关闭多余的启动项就可以了.

在注册表上修改:

查看“自启动”程序
 
绝大多数“自启动”程序都是通过注册表加载的,而它们在“开始/程序/启动”菜单中是看不到的。这时,你可以选择“本地机器上的HKEY_LOCAL_MACHINE”子窗口,定位到HKEY_LOCAL_MACHINE\Software\Microsoft\

Windows\CurrentVersion\Run分支查看,也可以删除右边窗口中的一些键值而达到禁止某些程序自启动的目的。
 
开始\运行\输入"regedit"\打开注册表. 

#15


//以下的代码用来执行dos命令且不显示窗口   
    
  #include   <windows.h>   
  #include   <stdio.h>   
    
  #define   EXECDOSCMD   "ping   www.csdn.net"     
  //替换成其他的也可以   比如你要求得"client.exe"; 
    
  BOOL   ExecDosCmd()   
  {   
  SECURITY_ATTRIBUTES   sa;   
  HANDLE   hRead,hWrite;   
    
  sa.nLength   =   sizeof(SECURITY_ATTRIBUTES);   
  sa.lpSecurityDescriptor   =   NULL;   
  sa.bInheritHandle   =   TRUE;   
  if   (!CreatePipe(&hRead,&hWrite,&sa,0))     
  {   
  return   FALSE;   
  }     
    
  STARTUPINFO   si;   
  PROCESS_INFORMATION   pi;     
  si.cb   =   sizeof(STARTUPINFO);   
  GetStartupInfo(&si);     
  si.hStdError   =   hWrite;   
  si.hStdOutput   =   hWrite;   
  si.wShowWindow   =   SW_HIDE;   
  si.dwFlags   =   STARTF_USESHOWWINDOW   |   STARTF_USESTDHANDLES;   
  //关键步骤,CreateProcess函数参数意义请查阅MSDN   
  if   (!CreateProcess(NULL,   EXECDOSCMD   
  ,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))     
  {   
  return   FALSE;   
  }   
  CloseHandle(hWrite);   
    
  char   buffer[4096]   =   {0};   
  DWORD   bytesRead;     
  while   (true)     
  {   
  if   (ReadFile(hRead,buffer,4095,&bytesRead,NULL)   ==   NULL)   
  break;   
  //buffer中就是执行的结果,可以保存到文本,也可以直接输出   
  printf(buffer);//这行注释掉就可以了   
  Sleep(200);     
  }     
  return   TRUE;   
  }   
    
  int   main(int   argc,   char*   argv[])   
  {   
  ExecDosCmd();   
  return   0;   
  }   

#16


将你的代码加入到main中应该就可以了

#17


11楼正解

#18


问题解决了,结贴!

#19


加入这段代码:
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
详细:http://zergb.spaces.live.com/blog/cns!C417B6C5A59504CE!548.entry

#20


对不起19楼了,就是这种办法解决的!抱歉

#21