簡體   English   中英

如何通過將程序添加到注冊表來使程序在啟動時運行?

[英]How can I make my program run on startup by adding it to the registry?

我有一個 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()));

任何幫助表示贊賞

您的代碼存在三個問題。

  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));

你可以這樣做:

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 即可獲得編輯注冊表的權限。

需要提升(即以管理員身份運行)的程序不能設置為在啟動時自動運行。 請參閱: 如何在啟動時運行需要 UAC 提升的程序? 由於您的應用程序位於“\\AppData\\Roaming\\Microsoft\\Windows\\MyApp.exe”中,因此我假設此路徑受到保護並保留給需要提升的程序。 這可能是它對您不起作用的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM