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

Posted

技术标签:

【中文标题】如果应用程序具有应用程序清单,如何在 C# 中以编程方式获取?【英文标题】:How get programmatically in C# if application has application manifest? 【发布时间】:2014-10-22 06:38:42 【问题描述】:

我已经看到如何使用此参考 How can I embed an application manifest into an application using VS2008? 将清单添加到应用程序(控制台应用程序或 Windows 窗体应用程序)

here 和 here 了解如何将我的应用程序的清单文件嵌入到 PE 中

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

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

现在,

如果应用程序有应用程序清单,我希望以编程方式获取,例如从 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】:

我认为已经找到了解决问题的方法。

请记住,这可能不是最佳解决方案,我相信如果您对该主题进行更多研究,您会找到更好的解决方案。

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 文件中读取所有文本,因为应用程序清单是明文,并且 exe 或 dll 文件中包含 xml 格式,所以我们只需检查添加的清单中是否存在某些字符串,在我的示例中,ma​​nifestVersion 属性包含在 exe 或 dll 文件中。

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

【讨论】:

以上是关于如果应用程序具有应用程序清单,如何在 C# 中以编程方式获取?的主要内容,如果未能解决你的问题,请参考以下文章

如何将多个清单文件嵌入/合并到 C# 应用程序中?

如果自签名清单,C# 无法在 Azure 管道中传递构建

如何在 C# 中以编程方式安装 Windows 服务?

如何在 C# 中以编程方式获取 Lync 会议 URL?

在 C# 中找出确切的文件类型 [重复]

如何实现类似于“google keep notes”app清单功能的清单?