gpt4 book ai didi

c# - 判断程序集是否是一个gui应用程序

转载 作者:行者123 更新时间:2023-11-30 20:22:41 26 4
gpt4 key购买 nike

我正在尝试确定 C# 程序集是 GUI 还是控制台应用程序,以便构建一个可以自动重新创建丢失的快捷方式的工具。

目前,我有一个例程递归地步进 Program Files(和 x86 目录)中的所有目录。

对于它找到的每个 EXE,该工具调用 IsGuiApplication,传递 EXE 的名称。

从那里,我使用 LoadFrom 创建一个 Assembly 对象。我想检查这个程序集是否有 GUI 输出,但我不确定如何在 C# 中测试它。

我目前的想法是使用 GetStdHandle,但我不确定如何将其应用于正在运行的应用程序之外的程序集。

我在 C# 中的反射经验有限,因此我们将不胜感激。

using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace BatchShortcutBuild
{
class Program
{
//I'm uncertain that I need to use this method
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr GetStdHandle(int nStdHandle);

static void Main(string[] args) {
BuildShortcuts();
Console.ReadLine();
}

public static void BuildShortcuts() {
String dirRoot = "C:\\Program Files\\";
processRoot(dirRoot);

dirRoot = "C:\\Program Files (x86)\\";
processRoot(dirRoot);

Console.WriteLine("Finished enumerating files");
Console.ReadLine();
}


public static void processRoot(String path) {
try {
foreach (String theDir in Directory.EnumerateDirectories(path)) {
processRoot(theDir);
}

foreach (String theFile in Directory.EnumerateFiles(path, "*.exe")) {
if (IsGuiApplication(theFile)) {
//I would generate a shortcut here
}
}
} catch { }
}

public static bool IsGuiApplication(String filePath) {
Console.WriteLine(filePath);
Assembly a = Assembly.LoadFrom(filePath);
//How to get the program type from the assembly?
return false;
}

}
}

最佳答案

这里为了安全起见,@Killany 和@Nissim 建议的方法不是 100% 准确,因为控制台应用程序可以引用 System.Windows.* dll(错误或需要由'System.Windows' 程序集)。

我不确定是否存在 100% 的方法,因为可以为某些应用程序提供参数以在有/无 ui 的情况下运行(即静默)

关于c# - 判断程序集是否是一个gui应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30890104/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com