C++ Can';t创建所有用户启动的快捷方式

C++ Can';t创建所有用户启动的快捷方式,c++,winapi,C++,Winapi,我正在使用一些基本代码在我的程序的安装程序中使用。为了使程序在启动时运行,我在“所有用户”启动文件夹中创建了一个.lnk 我的代码用于创建快捷方式,但我一直收到错误代码5(priv error)。我尝试过右键单击并以管理员身份运行此代码,但它不起作用,返回错误代码5。我还使用该代码在文件系统的其他部分创建了快捷方式,没有问题 我还使用了第三方程序,主要是“elevate.exe”来运行我的程序,但仍然不起作用,它继续返回错误代码5 我的问题是,在没有UAC的情况下,如何使用下面的代码在所有用户的

我正在使用一些基本代码在我的程序的安装程序中使用。为了使程序在启动时运行,我在“所有用户”启动文件夹中创建了一个.lnk

我的代码用于创建快捷方式,但我一直收到错误代码5(priv error)。我尝试过右键单击并以管理员身份运行此代码,但它不起作用,返回错误代码5。我还使用该代码在文件系统的其他部分创建了快捷方式,没有问题

我还使用了第三方程序,主要是“elevate.exe”来运行我的程序,但仍然不起作用,它继续返回错误代码5

我的问题是,在没有UAC的情况下,如何使用下面的代码在所有用户的启动文件夹中创建快捷方式

 int main () 
 {

 CoInitialize(NULL);

 IShellLink* pShellLink = NULL;

 HRESULT hres;

 hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_ALL, IID_IShellLink,   (void**)&pShellLink);

  if (SUCCEEDED(hres))

  {
    pShellLink->SetPath("C:\\Windows\\System32\\testinstall\\test.exe");  // Path to the object we are referring to

    pShellLink->SetDescription("This is a test");

    pShellLink->SetIconLocation("C:\\Windows\\System32\\testinstall\\test.exe", 0);

    IPersistFile *pPersistFile;

    hres = pShellLink->QueryInterface(IID_IPersistFile, (void**)&pPersistFile);

    if (SUCCEEDED(hres))

    {
        hres = pPersistFile->Save(L"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup", TRUE);

        pPersistFile->Release();
    }

    else
    {
        cout << "Error 2" << endl;

        return 2;
    }

    pShellLink->Release();

    }

    else
    {

    cout << "Error 1" << endl;

    return 1;

    }

    cout << GetLastError ();

    _getch ();

    return 0;

    }
int main()
{
共初始化(空);
IShellLink*pShellLink=NULL;
HRESULT hres;
hres=CoCreateInstance(CLSID_ShellLink、NULL、CLSCTX_ALL、IID_IShellLink、(void**)和pShellLink);
如果(成功(hres))
{
pShellLink->SetPath(“C:\\Windows\\System32\\testinstall\\test.exe”);//指向所引用对象的路径
pShellLink->SetDescription(“这是一个测试”);
pShellLink->SetIconLocation(“C:\\Windows\\System32\\testinstall\\test.exe”,0);
IPersistFile*pPersistFile;
hres=pShellLink->QueryInterface(IID_IPersistFile,(void**)和pPersistFile);
如果(成功(hres))
{
hres=PPRESISTFILE->Save(L“C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup”,TRUE);
文件->发布();
}
其他的
{

出于兴趣,为什么不使用像NSIS这样的现有工具呢?UAC的全部目的是防止非特权程序修改诸如所有用户和系统级配置之类的内容。标记B-正如我所说的,即使以管理员身份运行(我也尝试过系统)UAC继续阻止它。轻量级在轨道上比赛-我将研究NSIS,但如果这个程序在作为系统运行时无法创建快捷方式,我不知道NSIS将如何运行。