Tag: uac

以编程方式重新启动IIS

我需要从C#/ .NET应用程序重新启动IIS。 这似乎是一个微不足道的问题,但到目前为止我还没有取得成功, 这个问题的答案都没有奏效。 我是这台机器的本地管理员。 我试过这个: var process = new Process { StartInfo = { Verb = “runas”, WorkingDirectory = @”C:\Windows\System32\”, FileName = @”issreset.exe” } }; process.Start(); 但是这会抛出一个Win32Exception – cannot find the file specified. 我还尝试了将整个路径放在FileName ,并使用UseShellExecute各种组合,但这些选项都没有帮助。 我也试过通过命令行调用它: var process = new Process { StartInfo = { Verb = “runas”, WindowStyle = ProcessWindowStyle.Hidden, FileName = @”cmd.exe”, […]

写入Program Files文件夹

我的应用程序包括一个用于更新应用程序的自更新程序可执行文件。 更新程序执行的第一个步骤之一是检查它是否具有对应用程序文件夹的写入权限 IPermission perm = new FileIOPermission(FileIOPermissionAccess.AllAccess, _localApplicationCodebase); if (!SecurityManager.IsGranted(perm)) { OnProgressChanged(“Security Permission Not Granted \n The updater does not have read/write access to the application’s files (” + _localApplicationCodebase + “)”,MessageTypes.Error); return false; } OnProgressChanged(“Updater have read/write access to local application files at ” + _localApplicationCodebase); return true; IPermission perm = new FileIOPermission(FileIOPermissionAccess.AllAccess, _localApplicationCodebase); […]

在C#中设置文件的UAC设置

我想给一个文件(已经存在于客户端计算机上.exe)权限,以便始终使用管理权限执行。 请注意,我想要授予权限的文件已经在目标计算机上。 我想通过用c#编写的另一个程序来更改该文件的权限,并且它具有执行所有操作的管理权限。 请让我知道如何使用此代码 System.Security.AccessControl.FileSecurity fs = File.GetAccessControl(@”c:\inam.exe”); FileSystemAccessRule fsar = new FileSystemAccessRule(“Everyone”, FileSystemRights.FullControl, AccessControlType.Allow); fs.AddAccessRule(fsar); File.SetAccessControl(@”c:\inam.exe”, fs); 此代码将正确更改权限但仍然在执行此代码后执行inam.exe时UAC未出现,并且inam.exe也无法执行管理操作。 实际上我已经在10,000多个客户端上部署了一个应用程序,因此想要发布一个补丁来解决管理权限问题。

如何检测到Windows VirtualStore的文件重定向?

自Win Vista发布以来,微软为以32位进程运行的传统应用程序引入了文件虚拟化。 作为Microsoft用户帐户控制(UAC)的一部分发布,尝试写入受操作系统保护的任何位置的任何遗留应用程序都将重定向到VirtualStore。 此时,已采取措施确保有问题的应用程序现在作为UAC感知的64位进程运行,但是,这对解决将用户数据迁移到被认为是安全的虚拟化位置的问题几乎没有作用。 在解决此问题时,我发现在处理多个用户帐户时,在C:\ Program Files(x86)\ MyApp \ Data的旧版路径中进行了一些更改,同时,已对VirtualStore位于%localappdata%\ VirtualStore \ Programs \ MyApp \ Data。 问题是,我如何检测是否正在进行任何文件/文件夹虚拟化以及如何合并这两个位置? 编辑:我发现几个网站详细说明了问题以及如何复制它,但没有任何内容包括修复它的方法。 我确实找到了这个参考文件FILE_ATTRIBUTE_VIRTUAL来定义一个看起来很有希望的文件属性 – 我发现了另一个参考,虽然我记不起来,但是这表明这是Windows使用的属性,表明正在进行文件虚拟化并标记请求重定向。 这些链接描述了这个问题: http://www.c-sharpcorner.com/uploadfile/GemingLeader/windows-file-and-registry-virtualization/ http://www.codeproject.com/Articles/66275/Windows-Vista-File-and-Registry-Virtualization http://download.microsoftvirtuallabs.com/download/8/a/7/8a71365b-4c80-4e60-8185-8f12f59bf1d4/UACDataRedirection.pdf

如何使用c#显示文件保存到受限位置的UAC提示?

当用户从我的应用程序中保存文件时,他们当前无法保存到受限制的位置(如C :)。 我认为这是一个很好的限制,但我想提供一个UAC提示来提升权限并允许用户保存在受限制的区域。 我已经看到很多关于这个主题的答案,涉及使用’runas’产生具有提升权限的新进程。 此外,似乎可以通过冒充其他用户来完成。 据我所知,这两种方法都要求用户提供用户凭据。 我想要做的基本上就是Windows本身的function。 当您尝试将文件复制到Windows 7中的C:\时(假设您已将UAC设置为其默认级别),您将收到以下提示: 单击带有UAC屏蔽的“继续”按钮后,该文件将复制到C:\,并且不提示输入凭据(假设您已使用管理员权限登录)。 如何在管理员用户的应用程序中复制此行为? 他们不应该冒充任何其他用户,因为他们已经拥有管理员权限。 任何人都可以提供有关Windows在此过程中所做操作的详细信息吗 它们是否使用提升的权限生成新的explorer.exe进程?

如何确定用户是否为管理员,即使未提升

在我的C#应用​​程序中,我需要检查当前用户是否是Administrators组的成员。 它需要与Windows XP和Windows 7兼容。 目前,我使用以下代码: bool IsAdministrator { get { WindowsIdentity identity = WindowsIdentity.GetCurrent(); WindowsPrincipal principal = new WindowsPrincipal(identity); return principal.IsInRole(WindowsBuiltInRole.Administrator); } } 问题是如果应用程序在Windows 7上运行且UAC作为非提升管理员打开,则此方法返回false。 即使应用程序作为非提升管理员运行,如何确定用户是否为管理员?

如何在.NET / C#中以编程方式为我的应用程序创建快捷方式(.lnk)添加快捷方式(.lnk)

我的应用程序将有一台每台机器(不是每个用户)启动快捷方式。 我可以在安装过程中创建快捷方式没问题。 当用户稍后删除它然后尝试重新启用时,我的问题就来了。 换句话说,他们会关闭RunOnStartup(删除Startup墨水),稍后他们会决定是否希望它在启动时运行,以便返回首选项并重新启用。 显然,这是一个非常普遍的抱怨.NET,没有一种本地方法来创建快捷方式。 但是,还没有找到一个很好的解决方案。 我发现/考虑的解决方案: 而不是创建一个快捷方式。 只需复制一份。 这可能是一个很好的解决方案。 我不能依赖于有一个开始菜单链接。 但是,我想我可以创建一个并将其保存在程序目录中……这会将问题转移到我的安装程序,以便必须使用在安装时指定的相应路径创建快捷方式。 执行此其他stackoverflow的答案并使用COM包装器对象。 我想避免COM。 它也写于2003年。所以,我不确定它将如何支持vista。 我会试一试,但没有方便的远景盒。 请改用注册表。 这就是我目前的做法……但是在Vista上遇到了问题。 似乎普遍的共识是,启动菜单快捷方式是正确的方法,这就是我的目标。 此外,我必须处理普通用户(而非管理员)尝试更改此首选项的情况。 在这种情况下,我需要优雅地失败,或者在vista的情况下允许用户输入管理员密码以获取管理员安全令牌。 已经适当考虑这个案例的答案将是非常棒的。 如果已经涵盖了这个主题,我道歉。 我在发帖前四处搜索。 更新 :复制安装程序创建的快捷方式是最佳解决方案。 我将发布代码一旦完成…遇到一些障碍与a)Environment.GetSpecialFolder没有引用已解决的StartMenu …但是,现在我正在处理提升权限将文件复制到适当的位置。 我为此主题创建了一个新的stackoverflow问题: 如何通过提示用户输入管理员凭据,将文件复制为Vista中的“标准用户”(即“管理选择应用程序”)?

证书存储区中证书的私钥不可读

我想我和这个人一样有同样的问题,但我没有他/她那么幸运,因为提供的解决方案对我不起作用。 提供的解决方案在C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys ( 不在子目录中)和C:\Users\[Username]\AppData\Roaming\Microsoft\Crypto\RSA (和子目录)中查找文件但是因为我希望安装程序将应用程序安装到所有用户,所以自定义操作在SYSTEM -User下运行,这导致实际在C:\ProgramData\Application Data\Microsoft\Crypto\RSA\S-1-5-18 。 当以管理员(右键单击 – >运行为管理员)运行“普通”应用程序执行完全相同的代码时,将在C:\Users\[Username]\AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21-1154405193-2177794320-4133247715-1000创建一个文件C:\Users\[Username]\AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21-1154405193-2177794320-4133247715-1000 。 使用WIX自定义操作生成的证书似乎没有私钥(“ 密钥集不存在 ”),而“正常”应用程序生成的证书具有。 在查看文件的权限时,它们似乎没问题,即使它们不同(工作者确实包括SYSTEM用户),即使将SYSTEM 1添加到(“非工作”)文件后我也无法在这里读取私钥,同样的错误。 然后我使用FindPrivateKey工具找到相应的文件,但我得到的是”Unable to obtain private key file name” 。 好的,这里有什么? Windows在哪里存储SYSTEM用户存储的证书的私钥? 也许没有创建任何私钥文件? 为什么?

需要在没有UAC弹出窗口的情况下提升权限

我有一个应用程序,它是另一个应用程序(我的主要应用程序)的启动器。 启动器进入FTP服务器,下载更新并安装它们。 但是,更新可执行文件需要将一些DLL和EXE复制到主应用程序的安装目录中,该目录位于Program Files中。 因此,我目前需要提升更新程序的权限。 这是一个问题,因为我的应用程序在启动时启动,并且通常只会加载到系统托盘(该应用程序与messenger / skype相当)。 如果我在尝试“静默”更新应用程序时开始在屏幕上弹出UAC警告,那就不再那么沉默了。 我现在看到的唯一避免问题的方法是给所有用户授予程序文件安装目录的权限,但我不愿意这样做。 还有其他想法吗? 我使用的是Windows 7,应用程序使用的是C#。

如何在Windows XP上以管理员身份运行其他应用程序

我使用了此处所述的应用程序清单文件,使我的应用程序的一部分以提升的权限运行(它需要)。 因此,在需要时,主程序只使用Process.Start调用一个小程序集,然后处理需要管理员权限的任务。 但是,如何在Windows XP上执行相同的操作? 似乎XP只是忽略了这个清单并在当前用户上下文中运行小程序集。