Files
AX-Copilot-Codex/.decompiledproj/AxCopilot/Services/ShellExtensionService.cs

106 lines
2.5 KiB
C#

using System;
using System.Diagnostics;
using Microsoft.Win32;
namespace AxCopilot.Services;
public static class ShellExtensionService
{
private const string MenuKey = "AxCopilotShell";
private const string MenuLabel = "AX Agent로 분석";
public static bool Register()
{
try
{
string text = Process.GetCurrentProcess().MainModule?.FileName ?? "";
if (string.IsNullOrEmpty(text))
{
return false;
}
RegisterContextMenu("Software\\Classes\\*\\shell", text, "--analyze-file \"%1\"");
RegisterContextMenu("Software\\Classes\\Directory\\shell", text, "--analyze-folder \"%1\"");
RegisterContextMenu("Software\\Classes\\Directory\\Background\\shell", text, "--analyze-folder \"%V\"");
LogService.Info("셸 확장 등록 완료");
return true;
}
catch (Exception ex)
{
LogService.Error("셸 확장 등록 실패: " + ex.Message);
return false;
}
}
public static bool Unregister()
{
try
{
DeleteKey("Software\\Classes\\*\\shell\\AxCopilotShell");
DeleteKey("Software\\Classes\\Directory\\shell\\AxCopilotShell");
DeleteKey("Software\\Classes\\Directory\\Background\\shell\\AxCopilotShell");
LogService.Info("셸 확장 해제 완료");
return true;
}
catch (Exception ex)
{
LogService.Error("셸 확장 해제 실패: " + ex.Message);
return false;
}
}
public static bool IsRegistered()
{
try
{
using RegistryKey registryKey = Registry.CurrentUser.OpenSubKey("Software\\Classes\\*\\shell\\AxCopilotShell");
return registryKey != null;
}
catch
{
return false;
}
}
private static void RegisterContextMenu(string basePath, string exePath, string args)
{
string text = basePath + "\\AxCopilotShell";
using RegistryKey registryKey = Registry.CurrentUser.CreateSubKey(text);
if (registryKey == null)
{
return;
}
registryKey.SetValue("", "AX Agent로 분석");
registryKey.SetValue("Icon", "\"" + exePath + "\",0");
using RegistryKey registryKey2 = Registry.CurrentUser.CreateSubKey(text + "\\command");
registryKey2?.SetValue("", "\"" + exePath + "\" " + args);
}
private static void DeleteKey(string path)
{
try
{
Registry.CurrentUser.DeleteSubKeyTree(path, throwOnMissingSubKey: false);
}
catch
{
}
}
public static (string Action, string Path)? ParseCommandLine(string[] args)
{
for (int i = 0; i < args.Length - 1; i++)
{
if (args[i] == "--analyze-file")
{
return ("file", args[i + 1]);
}
if (args[i] == "--analyze-folder")
{
return ("folder", args[i + 1]);
}
}
return null;
}
}