对于我的MSI安装程序,Vista SP1 UAC提示为我的MSI名称显示"5eab7.msi",这显然不是我的MSI文件名.但是公司名称是正确的.如何让UAC提示显示我的安装程序的真实姓名?顺便说一句,我正在使用WiX.
先感谢您!
我正试图弄清楚如何解决特权获取问题.
该应用程序需要桌面访问,因此无法作为Windows服务执行:它必须创建一个窗口,用于接收其他进程使用SendMessage发送的消息(它必须用于等待消息确认).
应用程序应在用户登录时启动,并将管理用户会话(管理应用程序,窗口......).一次只能管理一个用户.
我要问的是哪个是请求权限获取的最佳解决方案,因为应用程序需要它(执行调用SetWindowsHook的进程).
拥有完全兼容的UAC应用程序需要采取哪些明确的行动?(我的意思是在构建和部署阶段?
例如,我使用mt.exe包含以下清单文件(使用VS2005):
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft- com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
security>
<applicationRequestMinimum>
<defaultAssemblyRequest permissionSetReference="Custom" />
<PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true" ID="Custom" SameSite="site" />
</applicationRequestMinimum>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</asmv1:assembly>
Run Code Online (Sandbox Code Playgroud)
这对你好吗?不,因为它对我不起作用......
*
创建一个额外的用户帐户(但这也适用于Windows域)实际上是有意义的,具有管理员权限来执行受控环境.在没有记录任何用户的情况下创建工作会话(新的桌面工作站)也是可以接受的,但实际上我不知道是否可能.
我有一个c#程序,它将xml文件写入"C:"磁盘.我将我的程序作为一个单击包发布,因为它仅用于测试目的.但问题是一键包没有"以管理员身份运行"选项.那么我该如何解决这个问题呢?任何的想法 ?
我们有一个应用程序套件,我们通过自行开发的"自动更新"应用程序进行更新.此应用程序基本上连接到我们的"更新服务器"并下载文件以覆盖,更新甚至向我们的应用程序套件添加新功能/应用程序.但是,这对UAC不起作用.我们的自动更新应用程序是一个命令行.NET应用程序,它通过HKLM\Software\Microsoft\Windows\CurrentVersion\Run注册表项启动.
我们遇到的问题是当UAC启用时我们的应用程序无法运行.它也不会提示用户允许程序运行.有什么方法可以解决这个问题或解决问题?
以下不是选项:
1.关闭UAC - 公司政策
2.使用ClickOnce - 不支持我们的需求(这就是为什么我们本土化)
非常感谢.
我们将应用程序与c ++中带有requireAdministrator选项的清单相关联.这是因为应用程序修改了HKLM注册表项.当我们执行应用程序时,Windows将显示以下消息.如果不更改Windows的UAC设置,是否可以在我们的应用程序中显示此窗口?
我可以使用copyfile(); 函数将文件复制到Windows XP上的c:/ windows/system32,但后来我使用Windows 7上的功能我无法复制它:o文件不会来那里....
我在编写和阅读注册时遇到了同样的问题,但通过声明WOW键$ 0100修复了它...
我认为问题是uac但不确定..有人可以解释一下:D?
我有错误信息:
请求的注册表访问被拒绝
当试图通过打开UAC 写入注册密钥时:
RegistryKey.OpenRemoteBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, "")
tawkey.OpenSubKey(x, true).SetValue(X, V, RegistryValueKind.DWord)
Run Code Online (Sandbox Code Playgroud)
在我的软件安装过程中,我必须运行"subinacl/subkeyreg HKEY_LOCAL_MACHINE\PathToMyKeys .../grant = user = f"吗?或者还有其他方法可以访问我的注册表项?
谢谢.
我正在使用inno setup安装我的软件(myprog.exe),我想强制用户启动myprog.exe作为管理员,但我无法弄清楚!我的exe在图标上没有uac盾牌,它可以在没有"右键单击"的情况下启动 - "以管理员身份运行"
我为安装程序设置了PrivilegesRequired = admin,但我只是为了安装阶段.
事实上,我想告诉Windows"嘿,我的程序是危险的,allays要求以管理员身份运行它"
有任何想法吗?
我有一个可运行的MyApp.jar,我通过使用launch4j将其编译为MyApp.exe,并且由于此应用需要管理员权限,因此我尝试通过遵循以下文章向其添加清单文件:http : //msdn.microsoft.com/zh- us / library / bb756929.aspx 当我表演时
mt.exe –manifest manifest.xml –outputresource:MyApp.exe;#1
Run Code Online (Sandbox Code Playgroud)
该过程已完成,没有错误,但是MyApp.exe文件的大小仅从6mb减小到32kb,并且当我尝试运行它时,出现以下错误:错误:jarfile无效或损坏。也许有人知道这是怎么回事?我的清单文件如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0"
processorArchitecture="X86"
name="MyApp.exe"
type="win32"/>
<description>{app name}</description>
<!-- Identify the application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="true"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Run Code Online (Sandbox Code Playgroud) 我目前正在处理的Windows服务有问题.基本上我在HKCU注册表中存储了一些值(来自以管理员身份运行的GUI工具),并且在该GUI中我正在启动服务.该服务使用SYSTEM帐户运行,我相信这是我的问题 - 我无法访问存储在我的GUI工具内的服务器内的注册表项,因为它指向一个不同的HKCU!
如何"重定向"服务以使用存储用户的HKCU?(实际上我可以将用户名传递给服务或SID,如果有人会指出我如何在我的GUI中检索它,但我不知道我应该用什么来"改变"用户指向正确的用户名)
@编辑
我使用静态类来访问注册表,它由GUI和Service使用,并且检索基本密钥的函数是(rootKey是保存子项名称的字符串变量):
private static RegistryKey GetBaseKey(bool writable = false)
{
try
{
RegistryKey reg = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64);
RegistryKey rk = reg?.OpenSubKey("SOFTWARE", writable)?.OpenSubKey(rootKey, writable);
return rk;
}
catch (Exception ex)
{
// handle exceptions later
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
我找到了可以为当前用户提供句柄(AccessToken)的WindowsIdentity类,我应该将它作为参数传递给我的服务并使用此句柄来模拟服务内部吗?
@ EDIT2
我做了一些东西,但它不起作用.我尝试了什么:
CurrentUserToken = WindowsIdentity.GetCurrent().Token; // to get current identity token
Run Code Online (Sandbox Code Playgroud)
然后ServiceController.Start
我加入了CurrentUserToken.ToString()
作为参数.在我的服务中,我RegistryUserToken (IntPtr)
使用传递的值初始化,我坚持:
WindowsIdentity RegUser = new WindowsIdentity(RegistryUserToken)
Run Code Online (Sandbox Code Playgroud)
抛出异常
用于模拟的令牌无效 - 无法复制
我尝试使用当前WindowsIdentity实例的AccessToken进行相同操作 - 抛出相同的异常
我可以这样走吗?或者我应该尝试不同的东西?