Files
RevokeMsgPatcher/RevokeMsgPatcher/Utils/PathUtil.cs

116 lines
3.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace RevokeMsgPatcher.Utils
{
public class PathUtil
{
public static void DisplayAllProgram()
{
RegistryKey uninstallKey, programKey;
uninstallKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall");
string[] programKeys = uninstallKey.GetSubKeyNames();
foreach (string keyName in programKeys)
{
programKey = uninstallKey.OpenSubKey(keyName);
Console.WriteLine(keyName + " , " + programKey.GetValue("DisplayName") + " , " + programKey.GetValue("InstallLocation"));
programKey.Close();
}
uninstallKey.Close();
}
/// <summary>
/// 从注册表中寻找安装路径
/// </summary>
/// <param name="uninstallKeyName">
/// 安装信息的注册表键名
/// 微信WeChat
/// QQ{052CFB79-9D62-42E3-8A15-DE66C2C97C3E}
/// TIMTIM
/// </param>
/// <returns>安装路径</returns>
public static string FindInstallPathFromRegistry(string uninstallKeyName)
{
try
{
RegistryKey key = Registry.LocalMachine.OpenSubKey($@"Software\Microsoft\Windows\CurrentVersion\Uninstall\{uninstallKeyName}");
if (key == null)
{
return null;
}
object installLocation = key.GetValue("InstallLocation");
key.Close();
if (installLocation != null && !string.IsNullOrEmpty(installLocation.ToString()))
{
return installLocation.ToString();
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
return null;
}
public static string FindInstallPathFromRegistryWOW6432Node(string uninstallKeyName)
{
try
{
RegistryKey key = Registry.LocalMachine.OpenSubKey($@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{uninstallKeyName}");
if (key == null)
{
return null;
}
object installLocation = key.GetValue("UninstallString");
key.Close();
if (installLocation != null && !string.IsNullOrEmpty(installLocation.ToString()))
{
return installLocation.ToString();
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
return null;
}
/// <summary>
/// 获取所有可能的默认安装路径
/// </summary>
/// <param name="relativePath">Tencent\*</param>
/// <returns></returns>
public static List<string> GetDefaultInstallPaths(string relativePath)
{
List<string> list = new List<string>();
// 从默认安装目录查找
string[] drives = Environment.GetLogicalDrives(); //获取当前计算机逻辑磁盘名称列表
foreach (string d in drives)
{
string path = Path.Combine(d, $@"Program Files (x86)\{relativePath}");
if (Directory.Exists(path))
{
list.Add(path);
}
}
return list;
}
/// <summary>
/// 按文件夹修改时间倒序
/// </summary>
/// <param name="dirs"></param>
public static void SortByLastWriteTimeDesc(ref DirectoryInfo[] dirs)
{
Array.Sort(dirs, delegate (DirectoryInfo x, DirectoryInfo y) { return y.LastWriteTime.CompareTo(x.LastWriteTime); });
}
}
}