管理员权限请求

时间:2010-02-01 07:07:52

标签: delphi windows-vista c++builder vcl

如果我没有以“管理员”身份运行我的程序,则会出错 模块中的 访问冲突 ... ...等等......

尝试使用我的ini文件时出错。 如何避免错误或发出请求管理员权限。

(使用C ++ Builder6,但Delphi代码对我来说也是可读的)

默认情况下使用ini

TIniFile *FormCllient;
        FormCllient = new TIniFile(ExtractFilePath(Application->ExeName)+"Inf\\MyIniFile.ini");
...

已添加:

我想我需要在安装应用程序后添加文件夹规则 我用Inno Setup制作安装包......希望这是真的。

*****补充:*****

如何将我的文件放入应用数据?

4 个答案:

答案 0 :(得分:3)

除非你真的需要/,否则不要将ini文件放在应用程序中。普通用户,甚至管理员/当应用程序未明确提升/无权写入Program Files文件夹时。 如果要编写可供所有用户访问的ini,请使用环境var%ProgramData%;如果要编写仅可由当前用户访问的用户特定数据,请使用env var%USERPROFILE%\ AppData \ Roaming。 您也可以使用“SHGetFolderPath”以通过API获取这些文件夹。

答案 1 :(得分:2)

这是我为在C ++ Builder中获取Application Data文件夹而编写的函数。

如果您使用的是旧版本的C ++ Builder,您可能会发现必须将其更改为使用AnsiStrings而不是Unicode(将“UnicodeString”替换为“AnsiString” ,并将通话更改为“SHGetSpecialFolderPathW”以阅读“SHGetSpecialFolderPath”。

GetAppDataFolder.h:

#ifndef GetAppDataFolderH
#define GetAppDataFolderH

UnicodeString GetAppDataFolder(bool roaming = true);

#endif

GetAppDataFolder.cpp:

// Helper function to get the location of the current user's Application Data folder (used for
// storing per-user application settings).

#include <vcl.h>
#pragma hdrstop


/*  roaming:    True for application data that can be accessed by the same user on different
                machines. If you have per-user settings that are only relevant to a particular
                computer, e.g., screen resolution, set 'roaming' to false.
*/
UnicodeString GetAppDataFolder(bool roaming /* = true */)
{
    UnicodeString retVal;
    int csidl = roaming ? CSIDL_APPDATA : CSIDL_LOCAL_APPDATA;
    wchar_t thePath[MAX_PATH];
    if (SHGetSpecialFolderPathW(NULL, thePath, csidl, 0) == TRUE) {
        retVal = thePath;
    }
    return retVal;
}

答案 2 :(得分:0)

尝试对其进行硬编码,访问冲突可能来自向系统询问有关用户可能或可能没有权限知道的文件的信息。如果您需要更动态的解决方案,请尝试使用引用文件位置或用户“home”文件夹的环境变量

答案 3 :(得分:0)

是否存在/反对在注册表中存储您的应用配置的原因?我不是建议你重做提出问题的代码,只是对我自己未来的项目感到好奇。