2016-09-28 14 views
0

Windowsを起動してバックグラウンドで実行するときにC++プログラムを自動的に起動したいと考えています。私はそれについて何かを検索し、C++プログラムを登録してWindowsサービスにすることができるので、ウィンドウが起動すると自動的にプログラムを実行できるようになります。 このコードをAdd Application to Startup (Registry)にコピーしてコードを実行しますが、コンピュータ管理 - >サービスのレコードは表示されません。ここ はコードです:Windows起動時に自動的に起動するC++プログラムを設定するには?(Windowsサービスソリューションで)

#include "stdafx.h" 
#include<Windows.h> 
#include <Winbase.h> 

BOOL RegisterMyProgramForStartup(PCWSTR pszAppName, PCWSTR pathToExe, PCWSTR args) 
{ 
HKEY hKey = NULL; 
LONG lResult = 0; 
BOOL fSuccess = TRUE; 
DWORD dwSize; 

const size_t count = MAX_PATH * 2; 
wchar_t szValue[count] = {}; 


wcscpy_s(szValue, count, L"\""); 
wcscat_s(szValue, count, pathToExe); 
wcscat_s(szValue, count, L"\" "); 

if (args != NULL) 
{ 
    wcscat_s(szValue, count, args); 
} 

lResult = RegCreateKeyExW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, NULL, 0, (KEY_WRITE | KEY_READ), NULL, &hKey, NULL); 

fSuccess = (lResult == 0); 

if (fSuccess) 
{ 
    dwSize = (wcslen(szValue) + 1) * 2; 
    lResult = RegSetValueExW(hKey, pszAppName, 0, REG_SZ, (BYTE*)szValue, dwSize); 
    fSuccess = (lResult == 0); 
} 
if (hKey != NULL) 
{ 
    RegCloseKey(hKey); 
    hKey = NULL; 
} 

return fSuccess; 
} 

void RegisterProgram() 
{ 
wchar_t szPathToExe[MAX_PATH]; 

GetModuleFileNameW(NULL, szPathToExe, MAX_PATH); 
RegisterMyProgramForStartup(L"ConsoleApplication7", szPathToExe, L"-foobar"); 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
RegisterProgram(); 

return 0; 
} 
+1

サービスを開始していません。あなたはアプリケーションを実行しています。彼らは同じことではありません。タスクマネージャの[アプリケーション]または[プロセス]タブで探します。 –

+0

また、この方法では、コンピュータの起動時にプログラムが実行されず、ユーザーがログオンしたときにプログラムが実行されることにも注意してください。 (そして、完全に無効にされるかもしれないが、Runキーが悪用されるので、システム管理者の中にはそうすることが好ましい。) –

答えて

0

は、すでに述べたように、あなたがサービスを登録していないコメントで述べたが、自動実行エントリを作成します。あなたのアプリケーションは、サービスとしての資格を得るために様々なことを実装しなければなりません。

code.msdn.microsoft.com hereには、独自のサービスの作成を開始するのに役立つサンプルプロジェクトがあります。

関連する問題