如果应用程序有应用程序清单,如何在C#中以编程方式获取?

3

我看过了如何使用这个参考链接 How can I embed an application manifest into an application using VS2008? 将清单添加到应用程序(控制台应用程序或 Windows 窗体应用程序)中。

这里这里 中有将应用程序的清单文件嵌入 PE 内的方法。

您可以按照以下步骤为 C# 应用程序添加清单:

  1. 在“解决方案资源管理器”中右键单击您的项目
  2. 从上下文菜单中选择“添加新项”。
  3. 在出现的对话框中的选项列表中选择“应用程序清单文件”。

现在,

我想要以编程方式获取应用程序是否具有应用程序清单,例如从 requestedExecutionLevel 节点获取级别和 uiAccess 值。

<security>
  <applicationRequestMinimum>
    <PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true" ID="Custom" SameSite="site" />
    <defaultAssemblyRequest permissionSetReference="Custom" />
  </applicationRequestMinimum>
  <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">

    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

  </requestedPrivileges>
</security>

以下是两种解决方案的替代方式:

1)将代码添加到应用程序的源代码中。

2)将代码添加到使用某些应用程序的公共库中。

是否有带有完整源代码示例应用程序的最终解决方案?

在我看来,为了最小化学习曲线,更好的示例是具有完整源代码和良好模式的实际应用程序。

1个回答

0

我想我已经找到了这个问题的解决方案。

请记住,这可能不是最好的解决方案,如果您在这个主题上进行更多的研究,您一定会找到更好的解决方案。

string exeFileData = File.ReadAllText(@"path\file.exe");
string dllFileData = File.ReadAllText(@"path\file.dll");

if (exeFileData.Contains("manifestVersion"))
{
    Console.WriteLine("Exe contains a manifest");
}

if (dllFileData.Contains("manifestVersion"))
{
    Console.WriteLine("Dll contains a manifest");
}

这可能是你能想到的最简单的解决方案。

只需从exe或dll文件中读取所有文本,因为应用程序清单是明文且以xml格式包含在exe或dll文件中,所以我们只需要检查是否在添加的清单中存在某些字符串,例如我的示例中的manifestVersion属性,是否包含在exe或dll文件中。

就像我说的,这肯定不是最好的解决方案,但我发现它对我有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接