win7下,程序如何获取管理员权限,
我的程序在更新一个文件的时候出现异常,
后来在修改的时候 干脆 DeleteFile它,GetLastError的时候返回 5然后手动找到该文件,手动删除,系统就跳出一个提示框,
说必须有系统管理员权限菜能进行此操作,我点选ok之类的就可以删除,再声明一下,那不是系统文件,属于我们软件的文件怎么改变执行权限呢
我的程序在更新一个文件的时候出现异常,
后来在修改的时候 干脆 DeleteFile它,GetLastError的时候返回 5然后手动找到该文件,手动删除,系统就跳出一个提示框,
说必须有系统管理员权限菜能进行此操作,我点选ok之类的就可以删除,再声明一下,那不是系统文件,属于我们软件的文件怎么改变执行权限呢
{
BOOL fOK = FALSE;
HANDLE hToken = NULL;
if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken))
{
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount =1;
LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tp.Privileges[0].Luid);
tp.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0;
AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL);
fOK = (GetLastError()==ERROR_SUCCESS);
CloseHandle(hToken);
}
return fOK;
}
这位大哥啊,下班没,你提供的代码,在xp下true,win下就fail了,
怎么改下啊
Win7上有UAC限制,为了加强安全,需要提升.
以管理员身份重新打开进程
TCHAR szApplication[MAX_PATH];
DWORD cchLength = _countof(szApplication);
QueryFullProcessImageName(
GetCurrentProcess(), 0, szApplication, &cchLength);
DWORD dwStatus = StartElevatedProcess(szApplication, NULL);
TOKEN_PRIVILEGES tkp;
// Get a token for this process.
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return( FALSE );
// Get the LUID for the shutdown privilege.
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// Get the shutdown privilege for this process.
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0);
if (GetLastError() != ERROR_SUCCESS)
return FALSE;
我的程序在win7下需要以管理员权限运行,因为要修改一些文件,所以在通过资源文件的方式加入了控制。但是程序以管理员权限启动时,老是弹出uac的提示框,一定要用户点击yes才能继续,很烦,有没有什么方式,可以不会弹出提示框,而直接以管理员方式启动的方法?