mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-05 18:57:19 +02:00
* Moved Logger/Log.cs from Wox.Infrastructure to Wox.Plugin
- Installed Logger dependency in Wox.Plugin: NLog.Extensions.Logging
- Moved file Log.cs from Wox.Infrastructure/Logger/ to Wox.Plugin/Logger
- Moved file Constant.cs from Wox.Infrastructure to Wox.Plugin: This file was moved since Log.cs depends on this class
- Copied Wox.Infrastructure.Helper.NonNull to Wox.Plugin.Constant since Constant.cs depends on this method
- Replaced all "using Wox.Infrastructure.Logger" to "using Wox.Plugin.Logger" in all files as needed
- Replaced Wox.Infrastructure.Constant to Wox.Plugin.Constant in all files as needed
* Removed Nlog.Extensions.Logging from Wox.Infrastructure
* Added logging and suppressed general exceptions (CA1031: Do not catch general exception types)
* Resolved fxcop errors introduced by newly added Log.cs
- CA1307: Specify StringComparison for clarity
- CA2000: Dispose objects before losing scope
- CA1062: Validate arguments of public methods
* Replaced Wox.Infrastructure.Logger with Wox.Plugin.Logger
115 lines
3.3 KiB
C#
115 lines
3.3 KiB
C#
// Copyright (c) Microsoft Corporation
|
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
|
// See the LICENSE file in the project root for more information.
|
|
|
|
using System;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.Reflection;
|
|
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Converters;
|
|
using Wox.Plugin.Logger;
|
|
|
|
namespace Wox.Infrastructure
|
|
{
|
|
public static class Helper
|
|
{
|
|
/// <summary>
|
|
/// http://www.yinwang.org/blog-cn/2015/11/21/programming-philosophy
|
|
/// </summary>
|
|
public static T NonNull<T>(this T obj)
|
|
{
|
|
if (obj == null)
|
|
{
|
|
throw new NullReferenceException();
|
|
}
|
|
else
|
|
{
|
|
return obj;
|
|
}
|
|
}
|
|
|
|
public static void RequireNonNull<T>(this T obj)
|
|
{
|
|
if (obj == null)
|
|
{
|
|
throw new NullReferenceException();
|
|
}
|
|
}
|
|
|
|
public static void ValidateDataDirectory(string bundledDataDirectory, string dataDirectory)
|
|
{
|
|
if (!Directory.Exists(dataDirectory))
|
|
{
|
|
Directory.CreateDirectory(dataDirectory);
|
|
}
|
|
|
|
foreach (var bundledDataPath in Directory.GetFiles(bundledDataDirectory))
|
|
{
|
|
var data = Path.GetFileName(bundledDataPath);
|
|
var dataPath = Path.Combine(dataDirectory, data.NonNull());
|
|
if (!File.Exists(dataPath))
|
|
{
|
|
File.Copy(bundledDataPath, dataPath);
|
|
}
|
|
else
|
|
{
|
|
var time1 = new FileInfo(bundledDataPath).LastWriteTimeUtc;
|
|
var time2 = new FileInfo(dataPath).LastWriteTimeUtc;
|
|
if (time1 != time2)
|
|
{
|
|
File.Copy(bundledDataPath, dataPath, true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void ValidateDirectory(string path)
|
|
{
|
|
if (!Directory.Exists(path))
|
|
{
|
|
Directory.CreateDirectory(path);
|
|
}
|
|
}
|
|
|
|
public static string Formatted<T>(this T t)
|
|
{
|
|
var formatted = JsonConvert.SerializeObject(t, Formatting.Indented, new StringEnumConverter());
|
|
|
|
return formatted;
|
|
}
|
|
|
|
// Function to run as admin for context menu items
|
|
public static void RunAsAdmin(string path)
|
|
{
|
|
var info = new ProcessStartInfo
|
|
{
|
|
FileName = path,
|
|
WorkingDirectory = Path.GetDirectoryName(path),
|
|
Verb = "runas",
|
|
UseShellExecute = true,
|
|
};
|
|
|
|
try
|
|
{
|
|
Process.Start(info);
|
|
}
|
|
catch (System.Exception ex)
|
|
{
|
|
Log.Exception($"Unable to Run {path} as admin : {ex.Message}", ex, MethodBase.GetCurrentMethod().DeclaringType);
|
|
}
|
|
}
|
|
|
|
public static Process OpenInConsole(string path)
|
|
{
|
|
var processStartInfo = new ProcessStartInfo
|
|
{
|
|
WorkingDirectory = path,
|
|
FileName = "cmd.exe",
|
|
};
|
|
|
|
return Process.Start(processStartInfo);
|
|
}
|
|
}
|
|
}
|