我不确定这是否是您问题的答案,但它似乎抑制了权限。要确保您的应用程序以管理员权限运行,请manifest
从添加新项目菜单中添加一个新文件。如果一切正常,您应该看到app.manifest
在解决方案资源管理器中命名的新文件。
完成后,通过双击app.manifest
从解决方案资源管理器trustinfo
打开它,当它在代码编辑器中打开时,将其部分替换为;
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Specifying requestedExecutionLevel node will disable file and registry virtualization.
If you want to utilize File and Registry Virtualization for backward
compatibility then delete the requestedExecutionLevel node.
-->
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
我们所做的是,我们更改了应用程序的清单以确保它在运行时获得管理权限。
这是为了说明,如何每次都以管理员身份运行应用程序,但是如果您只需要检查应用程序是否具有管理权限,则可以通过这种方式进行检查;
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
WindowsPrincipal appprincipal = (WindowsPrincipal) Thread.CurrentPrincipal;
if(appprincipal.IsInRole("Administrators"))//Check if the current user is admin.
{
//Yeah,the app has adminstrative rights,do what you need.
}
else
{
//Not running as administrator,react as needed.
//Show error message.
}
更新
要获取当前应用程序的完整路径,请使用它;
string path=Application.ExecutablePath;
Application.ExecutablePath 返回调用该方法的可执行文件的绝对路径。
例如:如果您的应用程序是记事本,它将返回C:\Windows\System32\Notepad.exe。
希望它能解决问题。