2016-12-24 43 views
0

我有一個VC++控制檯應用程序,我想在啓動時運行。我想通過將它添加到註冊表來執行此操作我已經嘗試了我在另一個帖子上發現的有關此操作的信息,但它沒有起作用,我註銷並重新登錄,但程序未啓動。下面是我用如何讓我的程序在啓動時運行,方法是將其添加到註冊表中?

string progPath = "C:/Users/user/AppData/Roaming/Microsoft/Windows/MyApp.exe"; 
HKEY hkey = NULL; 
long createStatus = RegCreateKey(HKEY_CURRENT_USER, L"/SOFTWARE/Microsoft/Windows/CurrentVersion/Run", &hkey);//Creates a key 


long status = RegSetValueEx(hkey, L"MyApp", 0, REG_SZ, (BYTE *)progPath.c_str(), sizeof(progPath.c_str())); 

代碼任何幫助表示讚賞

回答

6

您的代碼有三個問題。

  1. 您需要使用\而不是/

  2. 您將8位Ansi數據傳遞給需要16位Unicode數據的函數。使用std::wstring而不是std::string

  3. 您正在爲數據大小傳遞錯誤的值。它預計包含空終止符的字節計數

試試這個:

std::wstring progPath = L"C:\\Users\\user\\AppData\\Roaming\\Microsoft\\Windows\\MyApp.exe"; 
HKEY hkey = NULL; 
LONG createStatus = RegCreateKey(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", &hkey); //Creates a key  
LONG status = RegSetValueEx(hkey, L"MyApp", 0, REG_SZ, (BYTE *)progPath.c_str(), (progPath.size()+1) * sizeof(wchar_t)); 
+0

當我運行該代碼,它並沒有創建該「軟件\\微軟\\ Windows \\ CurrentVersion \\運行」鍵 – sharpchain

+0

哦,從來沒有見過哈哈我正在尋找錯誤的地方,你的工作感謝 – sharpchain

1

,你可以這樣做:

HKEY hKey; 
const char* czStartName = "MyApplication"; 
const char* czExePath = "C:\\Users\\user\\AppData\\Roaming\\Microsoft\\Windows\\MyApp.exe"; 

LONG lnRes = RegOpenKeyEx( HKEY_CURRENT_USER, 
          "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 
          0 , KEY_WRITE, 
          &hKey); 
if(ERROR_SUCCESS == lnRes) 
{ 
    lnRes = RegSetValueEx( hKey, 
          czStartName, 
          0, 
          REG_SZ, 
          (unsigned char*)czExePath, 
          strlen(czExePath)); 
} 

RegCloseKey(hKey); 

的czStartName是在應用程序的註冊表中的名稱。 czExePath是要在啓動時運行的可執行應用程序的完整路徑。 ,最後一個是可執行程序完整路徑的長度。

  • 如果你在Windows 7上,那麼你必須以管理員身份運行應用程序才能編輯註冊表。記住Windows 7使用UAC。

或以管理員身份打開MSVC,那麼它將有權編輯註冊表。

+0

,在所有這段時間沒有沒有工作,甚至在註冊表 – sharpchain

+0

仍然不起作用 – sharpchain

+0

露面@sharpchain它爲我工作。 – Raindrop7

相關問題