如何消除“你要允许此应用对你的设备进行更改吗”

DiskDriveIcon.h文件

#ifndef _DISK_DRIVE_ICON_H_
#define _DISK_DRIVE_ICON_H_

#pragma once

class CDiskDriveIcon
{
public:
    CDiskDriveIcon();
    virtual ~CDiskDriveIcon();

public:
    void UpdateDiskDriveIcon(char *drv);
    void DeleteDiskDriveIcon(char *drv);

public:
    void UpdateIconFile(char *drv);
    void DeleteIconFile(char *drv);
};

#endif // !_DISK_DRIVE_ICON_H_


DiskDriveIcon.cpp文件

#include "pch.h"
#include "DiskDriveIcon.h"



CDiskDriveIcon::CDiskDriveIcon()
{
}

CDiskDriveIcon::~CDiskDriveIcon()
{

}

void Single2Double(string& s) {
    string::size_type pos = 0;
    while ((pos = s.find('\\', pos)) != string::npos) {
        s.insert(pos, "\\");
        pos = pos + 2;
    }
}

void CDiskDriveIcon::UpdateDiskDriveIcon(char *drv)
{
    UpdateIconFile(drv);
    Sleep(200);

    char path[MAX_PATH];
    GetCurrentDirectoryA(MAX_PATH, path);

    char buffer[200];
    memset(buffer, 0, sizeof(buffer));
    sprintf_s(buffer, "/s %s\\builder.reg", path);

    ShellExecuteA(NULL, "open", "regedit.exe", buffer, NULL, SW_HIDE);

    //Sleep(500);
    //memset(buffer, 0, sizeof(buffer));
    //sprintf_s(buffer, "%s\\builder.reg", path);
    //DeleteFileA(buffer);
}

void CDiskDriveIcon::DeleteDiskDriveIcon(char *drv)
{
    DeleteIconFile(drv);
    Sleep(200);

    char path[MAX_PATH];
    GetCurrentDirectoryA(MAX_PATH, path);

    char buffer[200];
    memset(buffer, 0, sizeof(buffer));
    sprintf_s(buffer, "/s %s\\delete.reg", path);

    ShellExecuteA(NULL, "open", "regedit.exe", buffer, NULL, SW_HIDE);

    Sleep(500);
    memset(buffer, 0, sizeof(buffer));
    sprintf_s(buffer, "%s\\delete.reg", path);
    DeleteFileA(buffer);
}

void CDiskDriveIcon::UpdateIconFile(char *drv)
{

    char path[MAX_PATH];
    GetCurrentDirectoryA(MAX_PATH, path);

    FILE* pf = nullptr;
    fopen_s(&pf, "builder.reg", "w");

    char buffer[150];
    DWORD writesize = 0;
    memset(buffer, 0, sizeof(buffer));
    sprintf_s(buffer, "Windows Registry Editor Version 5.00\n");
    fwrite(buffer, strlen(buffer), 1, pf);

    memset(buffer, 0, sizeof(buffer));
    sprintf_s(buffer, "[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons]\n");
    fwrite(buffer, strlen(buffer), 1, pf);

    memset(buffer, 0, sizeof(buffer));
    sprintf_s(buffer, "[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons\\%s]\n", drv);
    fwrite(buffer, strlen(buffer), 1, pf);

    memset(buffer, 0, sizeof(buffer));
    sprintf_s(buffer, "[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons\\%s\\DefaultIcon]\n", drv);
    fwrite(buffer, strlen(buffer), 1, pf);

    char b1 = '\"';
    string::size_type pos = 0;
    string str = path;

    Single2Double(str);

    memset(buffer, 0, sizeof(buffer));
    sprintf_s(buffer, "@=%c%s\\\\ViewUI.dll,0%c\n", b1, str.c_str(), b1);
    fwrite(buffer, strlen(buffer), 1, pf);

    memset(buffer, 0, sizeof(buffer));
    sprintf_s(buffer, "[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons\\%s\\Defaultlabel]\n", drv);
    fwrite(buffer, strlen(buffer), 1, pf);

    memset(buffer, 0, sizeof(buffer));
    sprintf_s(buffer, "@=%cMCC NAS%c\n", b1, b1);
    fwrite(buffer, strlen(buffer), 1, pf);

    fclose(pf);
}

void CDiskDriveIcon::DeleteIconFile(char *drv)
{
    FILE* pf = nullptr;
    fopen_s(&pf, "delete.reg", "w");

    char buffer[150];
    memset(buffer, 0, sizeof(buffer));
    sprintf_s(buffer, "Windows Registry Editor Version 5.00\n");
    fwrite(buffer, strlen(buffer), 1, pf);

    memset(buffer, 0, sizeof(buffer));
    sprintf_s(buffer, "[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons]\n");
    fwrite(buffer, strlen(buffer), 1, pf);

    memset(buffer, 0, sizeof(buffer));
    sprintf_s(buffer, "[-HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons\\%s]\n", drv);
    fwrite(buffer, strlen(buffer), 1, pf);

    fclose(pf);
}


在Windows中,当应用程序需要对设备进行更改时,系统会弹出提示框来询问用户是否允许。这是为了确保用户的安全和隐私。

如果您想要消除“你要允许此应用对你的设备进行更改吗”的提示框,一般有两种方法:

  1. 使用管理员权限运行应用程序:以管理员身份运行应用程序可以绕过该提示框,因为管理员拥有对设备进行更改的权限。您可以尝试右键单击应用程序的可执行文件(例如.exe文件),然后选择“以管理员身份运行”。

  2. 修改应用程序的权限:您可以通过修改应用程序的权限,使其具有对设备进行更改的权限,从而避免弹出提示框。具体操作取决于您的应用程序和开发环境,通常涉及修改应用程序的清单文件(如.manifest文件)或者使用Windows API来请求权限。

请注意,修改应用程序的权限可能会对系统安全性造成影响,因此建议谨慎操作,并确保您的应用程序只在必要时才需要对设备进行更改。

试用下面的代码总是失败

HKEY hKey = nullptr;
CString strRegPath = L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons";
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, strRegPath, NULL, KEY_ALL_ACCESS, &hKey) != ERROR_SUCCESS)
{
        TRACE("RegOpenKeyExA fail...............\n");
}


```c++


```

Hi,试试这个
“单击开始,键入更改用户帐户控制设置
将其设置为从不通知,然后单击确定保存更改。”