我使用wix构建了一个安装程序,其中包括需要管理权限的自定义操作。
目前此安装程序仅在buildin管理员帐户执行时才有效。在这种情况下,不会显示UAC提示 如果安装程序由本地管理员组的任何其他成员执行,则会显示UAC提示。虽然我允许对我的计算机进行更改,但我的自定义操作中的windows api函数会返回“缺少权限”等错误,...
我试图让自定义操作执行延迟,但这没有帮助。
我的想法已经不多了,所以非常欢迎你的帮助。
此致 拉尔夫
答案 0 :(得分:1)
尝试使用 msidbCustomActionTypeNoImpersonate 标志运行自定义操作(将Impersonate设置为“no”): http://msdn.microsoft.com/en-us/library/aa368069(VS.85).aspx
这样它将在具有完全权限的本地系统帐户下运行。请注意,为了使用此标志,您的行为应该延期。
答案 1 :(得分:1)
据我所知,安装脚本由LocalSystem帐户执行。看起来似乎(看http://msdn.microsoft.com/en-us/library/ms684190)在此帐户中禁用了多项权限。例如,SE_BACKUP_NAME已禁用,调用LoadUserProfile需要此项。
我已经尝试过AdjustTokenPrivileges API函数,但没有成功。 LocalSystem帐户是否具有TOKEN_ADJUST_PRIVILEGES?我不知道相关的SE_XXXXXX_NAME权限。
此致 拉尔夫
答案 2 :(得分:1)
我发现的解决方案是我将我的安装程序与引导程序合并,如果用户没有适当的权限,它将提示UAC。
如果您不想使用此方法,此代码可能会对您有所帮助。
public static ActionResult CheckPrivileges(Session session) {
bool isadmin = false;
System.Security.Principal.WindowsIdentity wi = System.Security.Principal.WindowsIdentity.GetCurrent();
System.Security.Principal.WindowsPrincipal wp = new System.Security.Principal.WindowsPrincipal(wi);
if (wp.IsInRole("Administrators"))
isadmin = true;
else
isadmin = false;
if (isadmin)
{
return ActionResult.Success;
}
else
{
if (System.Environment.OSVersion.Version.Major >= 6) // Windows Vista or higher
MessageBox.Show("Administrator priveleges are required to install the application. Please right click the setup file and select 'Run as administrator'.", "Mesaage", MessageBoxButtons.OK, MessageBoxIcon.Error);
else
MessageBox.Show("Administrator priveleges are required to install the application.", "Mesaage", MessageBoxButtons.OK, MessageBoxIcon.Error);
return ActionResult.Failure;
}
}