如何在 Visual Studio 2019 中向我的 C# 程序添加清单文件?
How to add a manifest file to my C# program in Visual Studio 2019?
我有一个简单的应用程序,我想在管理员模式下强制执行 运行。为此,我需要编辑清单文件。我看到教程显示通过单击“项目-> 添加-> 新项目”来添加它,但那里没有适合我的清单文件。
我尝试制作自己的文件(并从项目属性中将其设置为清单文件)但我不知道在那里写什么,所以它不会崩溃。
这是一个应该有效的分步 'hack';它允许您获取默认嵌入式清单的副本并相应地进行修改。
首先,通过“添加 -> 新项目...”命令向您的项目添加一个新的XML文件,并将其命名为(例如)“Elevate.xml”。这最终将成为自定义清单。
接下来,要获取当前(嵌入式)清单,(重新)构建您的项目并从 Visual Studio 中打开目标 (.exe) 文件。 应该 在“资源浏览器”模式下打开该文件,类似于下图:
在该资源管理器中,打开“RT_MANIFEST”节点,双击显示的“1(中性)”子节点;这将打开一个新的 window,其中程序的嵌入式当前(默认)清单显示为二进制资源。清单实际上是 XML 文本格式,您可以 select 最右边的列中的文本(忽略一些 leading/trailing 不可打印的数据),如下所示:
复制那个 selection,打开你之前的“Elevate.xml”文件,删除它所有现有的内容并“粘贴”清单资源数据;这将为您提供类似于以下所示的内容:
<?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" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
然后您可以将“asInvoker”级别更改为“highestAvailable”,保存该文件并将其重命名(在项目树中)为“Elevate.manifest”。然后,您可以 select 项目属性中的自定义清单:
我已经在一个本地(但非常简单)示例程序上测试了这个方法,它似乎有效:当我运行这个程序时,系统确实向我询问管理员凭据。如果您有任何问题,那么您的情况可能需要进行一些小的调整。
我有一个简单的应用程序,我想在管理员模式下强制执行 运行。为此,我需要编辑清单文件。我看到教程显示通过单击“项目-> 添加-> 新项目”来添加它,但那里没有适合我的清单文件。
我尝试制作自己的文件(并从项目属性中将其设置为清单文件)但我不知道在那里写什么,所以它不会崩溃。
这是一个应该有效的分步 'hack';它允许您获取默认嵌入式清单的副本并相应地进行修改。
首先,通过“添加 -> 新项目...”命令向您的项目添加一个新的XML文件,并将其命名为(例如)“Elevate.xml”。这最终将成为自定义清单。
接下来,要获取当前(嵌入式)清单,(重新)构建您的项目并从 Visual Studio 中打开目标 (.exe) 文件。 应该 在“资源浏览器”模式下打开该文件,类似于下图:
在该资源管理器中,打开“RT_MANIFEST”节点,双击显示的“1(中性)”子节点;这将打开一个新的 window,其中程序的嵌入式当前(默认)清单显示为二进制资源。清单实际上是 XML 文本格式,您可以 select 最右边的列中的文本(忽略一些 leading/trailing 不可打印的数据),如下所示:
复制那个 selection,打开你之前的“Elevate.xml”文件,删除它所有现有的内容并“粘贴”清单资源数据;这将为您提供类似于以下所示的内容:
<?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" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
然后您可以将“asInvoker”级别更改为“highestAvailable”,保存该文件并将其重命名(在项目树中)为“Elevate.manifest”。然后,您可以 select 项目属性中的自定义清单:
我已经在一个本地(但非常简单)示例程序上测试了这个方法,它似乎有效:当我运行这个程序时,系统确实向我询问管理员凭据。如果您有任何问题,那么您的情况可能需要进行一些小的调整。