Compare commits
65 commits
Author | SHA1 | Date | |
---|---|---|---|
84dc1367d8 | |||
18816f3fbe | |||
625e509ede | |||
0a5227b071 | |||
c46294b46b | |||
672449fb3e | |||
09730bfbaf | |||
b019023344 | |||
ee6489e090 | |||
a4a97f7b99 | |||
76425a3c50 | |||
9eba20f28a | |||
a271150b0c | |||
bbe0e8dde9 | |||
48bb49671a | |||
6a97161ddd | |||
1aa93e2267 | |||
8ce6a92146 | |||
19cf5fb38e | |||
b9e7aac55f | |||
3f925ee17a | |||
9bd5cc3d88 | |||
b7590538f0 | |||
44c0e0ce91 | |||
3231cd4db2 | |||
3855076457 | |||
|
657ebb0d5f | ||
aeaae1f827 | |||
a87a6deab4 | |||
babc550b6d | |||
e932255f59 | |||
fcbac6a19b | |||
3db1a2a2e4 | |||
02984e0d2b | |||
e8af34b79c | |||
624801ceec | |||
868a13139d | |||
8ec0b67896 | |||
aa7aeff1f8 | |||
|
a601b8937c | ||
|
02e92e782f | ||
|
5234ee06e0 | ||
|
70cef4a361 | ||
|
3e2f389fc3 | ||
|
72a714e1f4 | ||
|
0599e715b6 | ||
|
6233a5d88e | ||
|
3fb5799b00 | ||
|
15202c9dfd | ||
|
8f26383166 | ||
|
3a8eb0a76c | ||
|
d408b51b0e | ||
|
d7e2b8a294 | ||
|
452790d923 | ||
|
726adc7193 | ||
|
0760600d47 | ||
|
58bef7537f | ||
|
6d281e4e44 | ||
|
6b745618e6 | ||
|
99267bdf9d | ||
|
e42fbf9b2a | ||
|
938afbd85b | ||
|
8df1f95123 | ||
|
d147415feb | ||
|
cdcfccd87c |
26 changed files with 2148 additions and 568 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -347,3 +347,6 @@ healthchecksdb
|
||||||
|
|
||||||
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||||
MigrationBackup/
|
MigrationBackup/
|
||||||
|
|
||||||
|
# Markdown backups
|
||||||
|
*.md.backup
|
|
@ -1,23 +1,41 @@
|
||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio Version 16
|
# Visual Studio Version 17
|
||||||
VisualStudioVersion = 16.0.29411.108
|
VisualStudioVersion = 17.6.33829.357
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EnvyUpdate", "EnvyUpdate\EnvyUpdate.csproj", "{1BF2468D-9579-462D-9153-4836E9C8721F}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EnvyUpdate", "EnvyUpdate\EnvyUpdate.csproj", "{1BF2468D-9579-462D-9153-4836E9C8721F}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug - ignoregpu|Any CPU = Debug - ignoregpu|Any CPU
|
Debug - ignoregpu|Any CPU = Debug - ignoregpu|Any CPU
|
||||||
|
Debug - ignoregpu|x64 = Debug - ignoregpu|x64
|
||||||
|
Debug - ignoregpu|x86 = Debug - ignoregpu|x86
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Debug|x64 = Debug|x64
|
||||||
|
Debug|x86 = Debug|x86
|
||||||
Release|Any CPU = Release|Any CPU
|
Release|Any CPU = Release|Any CPU
|
||||||
|
Release|x64 = Release|x64
|
||||||
|
Release|x86 = Release|x86
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{1BF2468D-9579-462D-9153-4836E9C8721F}.Debug - ignoregpu|Any CPU.ActiveCfg = Debug - ignoregpu|Any CPU
|
{1BF2468D-9579-462D-9153-4836E9C8721F}.Debug - ignoregpu|Any CPU.ActiveCfg = Debug - ignoregpu|Any CPU
|
||||||
{1BF2468D-9579-462D-9153-4836E9C8721F}.Debug - ignoregpu|Any CPU.Build.0 = Debug - ignoregpu|Any CPU
|
{1BF2468D-9579-462D-9153-4836E9C8721F}.Debug - ignoregpu|Any CPU.Build.0 = Debug - ignoregpu|Any CPU
|
||||||
|
{1BF2468D-9579-462D-9153-4836E9C8721F}.Debug - ignoregpu|x64.ActiveCfg = Debug - ignoregpu|x64
|
||||||
|
{1BF2468D-9579-462D-9153-4836E9C8721F}.Debug - ignoregpu|x64.Build.0 = Debug - ignoregpu|x64
|
||||||
|
{1BF2468D-9579-462D-9153-4836E9C8721F}.Debug - ignoregpu|x86.ActiveCfg = Debug - ignoregpu|x86
|
||||||
|
{1BF2468D-9579-462D-9153-4836E9C8721F}.Debug - ignoregpu|x86.Build.0 = Debug - ignoregpu|x86
|
||||||
{1BF2468D-9579-462D-9153-4836E9C8721F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{1BF2468D-9579-462D-9153-4836E9C8721F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{1BF2468D-9579-462D-9153-4836E9C8721F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{1BF2468D-9579-462D-9153-4836E9C8721F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{1BF2468D-9579-462D-9153-4836E9C8721F}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{1BF2468D-9579-462D-9153-4836E9C8721F}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{1BF2468D-9579-462D-9153-4836E9C8721F}.Debug|x86.ActiveCfg = Debug|x86
|
||||||
|
{1BF2468D-9579-462D-9153-4836E9C8721F}.Debug|x86.Build.0 = Debug|x86
|
||||||
{1BF2468D-9579-462D-9153-4836E9C8721F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{1BF2468D-9579-462D-9153-4836E9C8721F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{1BF2468D-9579-462D-9153-4836E9C8721F}.Release|Any CPU.Build.0 = Release|Any CPU
|
{1BF2468D-9579-462D-9153-4836E9C8721F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{1BF2468D-9579-462D-9153-4836E9C8721F}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{1BF2468D-9579-462D-9153-4836E9C8721F}.Release|x64.Build.0 = Release|x64
|
||||||
|
{1BF2468D-9579-462D-9153-4836E9C8721F}.Release|x86.ActiveCfg = Release|x86
|
||||||
|
{1BF2468D-9579-462D-9153-4836E9C8721F}.Release|x86.Build.0 = Release|x86
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|
|
@ -2,8 +2,14 @@
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:local="clr-namespace:EnvyUpdate"
|
xmlns:local="clr-namespace:EnvyUpdate"
|
||||||
|
xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml"
|
||||||
StartupUri="MainWindow.xaml">
|
StartupUri="MainWindow.xaml">
|
||||||
<Application.Resources>
|
<Application.Resources>
|
||||||
|
<ResourceDictionary>
|
||||||
|
<ResourceDictionary.MergedDictionaries>
|
||||||
|
<ui:ThemesDictionary Theme="Light"/>
|
||||||
|
<ui:ControlsDictionary />
|
||||||
|
</ResourceDictionary.MergedDictionaries>
|
||||||
|
</ResourceDictionary>
|
||||||
</Application.Resources>
|
</Application.Resources>
|
||||||
</Application>
|
</Application>
|
||||||
|
|
|
@ -8,6 +8,7 @@ using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using Windows.Foundation.Collections;
|
using Windows.Foundation.Collections;
|
||||||
|
using Wpf.Ui.Markup;
|
||||||
|
|
||||||
namespace EnvyUpdate
|
namespace EnvyUpdate
|
||||||
{
|
{
|
||||||
|
@ -19,25 +20,16 @@ namespace EnvyUpdate
|
||||||
protected override void OnStartup(StartupEventArgs e)
|
protected override void OnStartup(StartupEventArgs e)
|
||||||
{
|
{
|
||||||
// Listen to notification activation
|
// Listen to notification activation
|
||||||
ToastNotificationManagerCompat.OnActivated += toastArgs =>
|
ToastNotificationManagerCompat.OnActivated += ToastNotificationManagerCompat_OnActivated;
|
||||||
{
|
}
|
||||||
// Obtain the arguments from the notification
|
|
||||||
ToastArguments args = ToastArguments.Parse(toastArgs.Argument);
|
|
||||||
|
|
||||||
|
private void ToastNotificationManagerCompat_OnActivated(ToastNotificationActivatedEventArgsCompat e)
|
||||||
|
{
|
||||||
// Need to dispatch to UI thread if performing UI operations
|
// Need to dispatch to UI thread if performing UI operations
|
||||||
Application.Current.Dispatcher.Invoke(delegate
|
Application.Current.Dispatcher.Invoke(delegate
|
||||||
{
|
{
|
||||||
switch (args.Get("action"))
|
|
||||||
{
|
|
||||||
case "download":
|
|
||||||
Process.Start(Util.GetGpuUrl());
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
Util.ShowMain();
|
Util.ShowMain();
|
||||||
break;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
89
EnvyUpdate/DashboardPage.xaml
Normal file
89
EnvyUpdate/DashboardPage.xaml
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
<ui:UiPage x:Class="EnvyUpdate.DashboardPage"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:local="clr-namespace:EnvyUpdate"
|
||||||
|
xmlns:p="clr-namespace:EnvyUpdate.Properties"
|
||||||
|
xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
d:DesignHeight="400" d:DesignWidth="600"
|
||||||
|
Title="DashboardPage">
|
||||||
|
|
||||||
|
<Grid Margin="8,0,8,8">
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition />
|
||||||
|
<RowDefinition Height="Auto"/>
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
<ColumnDefinition Width="*"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
|
<ui:SymbolIcon Symbol="DeveloperBoard24" FontSize="56"/>
|
||||||
|
<TextBlock Margin="8,0,0,0" x:Name="textblockGPUName" Grid.Column="1" Text="GPU..." FontSize="32" HorizontalAlignment="Stretch" VerticalAlignment="Center" />
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
<Grid Grid.Row="1">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="*"/>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
|
<ui:InfoBar x:Name="infoBarStatus"
|
||||||
|
Title="Checking"
|
||||||
|
IsOpen="True"
|
||||||
|
IsClosable="False"
|
||||||
|
Message="..."
|
||||||
|
Severity="Informational" />
|
||||||
|
|
||||||
|
<ui:Button x:Name="buttonSkipVersion" Margin="8,0,0,0" Grid.Column="1" Appearance="Dark" Icon="ArrowForward24" Visibility="Collapsed" ToolTip="{x:Static p:Resources.ui_skipversion}" Click="buttonSkipVersion_Click" />
|
||||||
|
|
||||||
|
<ui:Button x:Name="buttonDownload" Margin="8,0,0,0" MinWidth="100" Grid.Column="2" Appearance="Primary" Content="{x:Static p:Resources.ui_download}" Icon="ArrowDownload24" Visibility="Collapsed" Click="buttonDownload_Click" />
|
||||||
|
<ui:Button x:Name="buttonInstall" Margin="8,0,0,0" MinWidth="100" Grid.Column="2" Appearance="Primary" Content="{x:Static p:Resources.ui_install}" Icon="AppsAddIn24" Visibility="Collapsed" Click="buttonInstall_Click" />
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
<ProgressBar x:Name="progressbarDownload" Grid.Row="2" Value="0" Visibility="Collapsed"/>
|
||||||
|
<!-- This is for later automatic downloading. Todo! -->
|
||||||
|
|
||||||
|
<Grid Margin="0,12,0,0" Grid.Row="3">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition/>
|
||||||
|
<ColumnDefinition/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
|
<ui:CardExpander x:Name="cardLocal" Margin="0,0,4,0" Grid.Column="0" Grid.Row="0" Icon="Desktop32" Header="..." ToolTip="{x:Static p:Resources.ui_localdriver}">
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition/>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
|
<TextBlock Grid.Column="0" FontWeight="Bold" Text="{x:Static p:Resources.ui_localdriver_type}"/>
|
||||||
|
<TextBlock Grid.Column="1" x:Name="textblockLocalType" Text="?" />
|
||||||
|
</Grid>
|
||||||
|
</ui:CardExpander>
|
||||||
|
<ui:CardExpander x:Name="cardOnline" Margin="4,0,0,0" Grid.Column="1" Grid.Row="0" Icon="Earth32" Header="..." ToolTip="{x:Static p:Resources.ui_onlinedriver}">
|
||||||
|
<ui:Button Icon="Open24" Click="CardOnline_Click" Content="{x:Static p:Resources.ui_openwebsite}" HorizontalAlignment="Stretch"/>
|
||||||
|
</ui:CardExpander>
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
<ui:CardControl Margin="0,12,0,0" Grid.Row="4" Icon="Color24" Header="Studio Driver">
|
||||||
|
<ui:ToggleSwitch x:Name="switchStudioDriver" Checked="switchStudioDriver_Checked" Unchecked="switchStudioDriver_Unchecked" />
|
||||||
|
</ui:CardControl>
|
||||||
|
|
||||||
|
<ui:CardControl Margin="0,12,0,0" Grid.Row="5" Icon="LightbulbFilament48" Header="{x:Static p:Resources.ui_autostart}">
|
||||||
|
<ui:ToggleSwitch x:Name="switchAutostart" Click="switchAutostart_Click" />
|
||||||
|
</ui:CardControl>
|
||||||
|
</Grid>
|
||||||
|
<ui:Snackbar x:Name="snackbarInfo" Timeout="0"/>
|
||||||
|
</Grid>
|
||||||
|
</ui:UiPage>
|
509
EnvyUpdate/DashboardPage.xaml.cs
Normal file
509
EnvyUpdate/DashboardPage.xaml.cs
Normal file
|
@ -0,0 +1,509 @@
|
||||||
|
using System;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Threading;
|
||||||
|
using MessageBox = System.Windows.MessageBox;
|
||||||
|
|
||||||
|
namespace EnvyUpdate
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Interaction logic for Dashboard.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class DashboardPage
|
||||||
|
{
|
||||||
|
private string localDriv = null;
|
||||||
|
private string onlineDriv = null;
|
||||||
|
private string gpuURL = null;
|
||||||
|
private string skippedVer = null;
|
||||||
|
private DateTime lastFileChanged = DateTime.MinValue;
|
||||||
|
|
||||||
|
public DashboardPage()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
|
||||||
|
if (GlobalVars.startMinimized)
|
||||||
|
Application.Current.MainWindow.Hide(); // Hide only AFTER initializing dashboard page, otherwise tray icon doesn't work
|
||||||
|
|
||||||
|
if (Debug.isFake)
|
||||||
|
localDriv = Debug.LocalDriv();
|
||||||
|
else
|
||||||
|
localDriv = Util.GetLocDriv();
|
||||||
|
|
||||||
|
Debug.LogToFile("INFO Local driver version: " + localDriv);
|
||||||
|
|
||||||
|
if (localDriv != null)
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Local driver version already known, updating info without reloading.");
|
||||||
|
UpdateLocalVer(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.LogToFile("INFO Detecting driver type.");
|
||||||
|
|
||||||
|
if (Debug.isFake)
|
||||||
|
textblockLocalType.Text = "DCH (Debug)";
|
||||||
|
else if (Util.IsDCH())
|
||||||
|
textblockLocalType.Text = "DCH";
|
||||||
|
else
|
||||||
|
textblockLocalType.Text = "Standard";
|
||||||
|
|
||||||
|
Debug.LogToFile("INFO Done detecting driver type: " + textblockLocalType.Text);
|
||||||
|
|
||||||
|
// Check for startup shortcut
|
||||||
|
if (File.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup), "EnvyUpdate.lnk")))
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Autostart is enabled.");
|
||||||
|
switchAutostart.IsChecked = true;
|
||||||
|
switchAutostart_Click(null, null); //Automatically recreate shortcut to account for moved EXE.
|
||||||
|
}
|
||||||
|
|
||||||
|
DispatcherTimer Dt = new DispatcherTimer();
|
||||||
|
Dt.Tick += new EventHandler(Dt_Tick);
|
||||||
|
// Check for new updates every 5 hours.
|
||||||
|
Dt.Interval = new TimeSpan(5, 0, 0);
|
||||||
|
Dt.Start();
|
||||||
|
Debug.LogToFile("INFO Started check timer.");
|
||||||
|
|
||||||
|
string watchDirPath = Path.Combine(Environment.ExpandEnvironmentVariables("%ProgramW6432%"), "NVIDIA Corporation\\Installer2\\InstallerCore");
|
||||||
|
if (Directory.Exists(watchDirPath))
|
||||||
|
{
|
||||||
|
GlobalVars.monitoringInstall = true;
|
||||||
|
|
||||||
|
var driverFileChangedWatcher = new FileSystemWatcher(watchDirPath);
|
||||||
|
driverFileChangedWatcher.NotifyFilter = NotifyFilters.Attributes
|
||||||
|
| NotifyFilters.CreationTime
|
||||||
|
| NotifyFilters.FileName
|
||||||
|
| NotifyFilters.LastAccess
|
||||||
|
| NotifyFilters.LastWrite
|
||||||
|
| NotifyFilters.Size;
|
||||||
|
driverFileChangedWatcher.Changed += DriverFileChanged;
|
||||||
|
|
||||||
|
driverFileChangedWatcher.Filter = "*.dll";
|
||||||
|
driverFileChangedWatcher.IncludeSubdirectories = false;
|
||||||
|
driverFileChangedWatcher.EnableRaisingEvents = true;
|
||||||
|
Debug.LogToFile("INFO Started update file system watcher.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Debug.LogToFile("WARN Could not start update file system watcher. Path not found: " + watchDirPath);
|
||||||
|
|
||||||
|
Load();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Dt_Tick(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Load();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Load()
|
||||||
|
{
|
||||||
|
if (Util.GetDTID() == 18)
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Found studio driver.");
|
||||||
|
switchStudioDriver.IsChecked = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Found standard driver.");
|
||||||
|
switchStudioDriver.IsChecked = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (File.Exists(Path.Combine(GlobalVars.saveDirectory,"skip.envy")))
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Found version skip config.");
|
||||||
|
skippedVer = File.ReadLines(Path.Combine(GlobalVars.saveDirectory, "skip.envy")).First();
|
||||||
|
}
|
||||||
|
|
||||||
|
// This little bool check is necessary for debug fake mode.
|
||||||
|
if (Debug.isFake)
|
||||||
|
{
|
||||||
|
localDriv = Debug.LocalDriv();
|
||||||
|
cardLocal.Header = localDriv;
|
||||||
|
textblockGPUName.Text = Debug.GPUname();
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Trying to get GPU update URL.");
|
||||||
|
gpuURL = Util.GetGpuUrl();
|
||||||
|
}
|
||||||
|
catch (ArgumentException)
|
||||||
|
{
|
||||||
|
Debug.LogToFile("WARN Could not get GPU update URL, trying again with non-studio driver.");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// disable SD and try with GRD
|
||||||
|
if (File.Exists(Path.Combine(GlobalVars.saveDirectory, "sd.envy")))
|
||||||
|
{
|
||||||
|
File.Delete(Path.Combine(GlobalVars.saveDirectory, "sd.envy"));
|
||||||
|
}
|
||||||
|
|
||||||
|
gpuURL = Util.GetGpuUrl(); //try again with GRD
|
||||||
|
MessageBox.Show(Properties.Resources.ui_studionotsupported);
|
||||||
|
switchStudioDriver.IsChecked = false;
|
||||||
|
}
|
||||||
|
catch (ArgumentNullException)
|
||||||
|
{
|
||||||
|
MessageBox.Show("ERROR: Could not get list of GPU models from Nvidia, please check your network connection.\nOtherwise, please report this issue on GitHub.");
|
||||||
|
Environment.Exit(11);
|
||||||
|
}
|
||||||
|
catch (ArgumentException e)
|
||||||
|
{
|
||||||
|
// Now we have a problem.
|
||||||
|
Debug.LogToFile("FATAL Invalid API response from Nvidia. Attempted API call: " + e.Message);
|
||||||
|
MessageBox.Show("ERROR: Invalid API response from Nvidia. Please file an issue on GitHub.\nAttempted API call:\n" + e.Message);
|
||||||
|
Environment.Exit(10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
using (var c = new WebClient())
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Trying to get newest driver version.");
|
||||||
|
string pContent = c.DownloadString(gpuURL);
|
||||||
|
var pattern = @"Windows\/\d{3}\.\d{2}";
|
||||||
|
Regex rgx = new Regex(pattern);
|
||||||
|
var matches = rgx.Matches(pContent);
|
||||||
|
onlineDriv = Regex.Replace(Convert.ToString(matches[0]), "Windows/", "");
|
||||||
|
cardOnline.Header = onlineDriv;
|
||||||
|
Debug.LogToFile("INFO Got online driver version: " + onlineDriv);
|
||||||
|
}
|
||||||
|
|
||||||
|
string correctLocalDriv;
|
||||||
|
string correctOnlineDriv;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
float.Parse(onlineDriv);
|
||||||
|
correctLocalDriv = localDriv;
|
||||||
|
correctOnlineDriv = onlineDriv;
|
||||||
|
}
|
||||||
|
catch (FormatException)
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Caught FormatException, assuming locale workaround is necessary.");
|
||||||
|
//Thank you locales. Some languages need , instead of . for proper parsing
|
||||||
|
correctLocalDriv = localDriv.Replace('.', ',');
|
||||||
|
correctOnlineDriv = onlineDriv.Replace('.', ',');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (float.Parse(correctLocalDriv) < float.Parse(correctOnlineDriv))
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Local version is older than online. Setting UI...");
|
||||||
|
SetInfoBar(false);
|
||||||
|
buttonDownload.Visibility = Visibility.Visible;
|
||||||
|
buttonSkipVersion.Visibility = Visibility.Visible;
|
||||||
|
if (skippedVer == null)
|
||||||
|
{
|
||||||
|
buttonSkipVersion.ToolTip = Properties.Resources.ui_skipversion;
|
||||||
|
buttonSkipVersion.IsEnabled = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
buttonSkipVersion.IsEnabled = false;
|
||||||
|
buttonSkipVersion.ToolTip = Properties.Resources.ui_skipped;
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.LogToFile("INFO UI set.");
|
||||||
|
|
||||||
|
if (skippedVer != onlineDriv)
|
||||||
|
{
|
||||||
|
if (GlobalVars.autoDownload)
|
||||||
|
{
|
||||||
|
if (buttonDownload.IsVisible)
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Auto-Downloading driver.");
|
||||||
|
buttonDownload_Click(null, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.LogToFile("INFO Showing update popup notification.");
|
||||||
|
Notify.ShowDrivUpdatePopup();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Local version is up to date.");
|
||||||
|
buttonSkipVersion.Visibility = Visibility.Collapsed;
|
||||||
|
SetInfoBar(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Check for different version than skipped version
|
||||||
|
if (skippedVer != null && skippedVer != onlineDriv)
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Skipped version is surpassed, deleting setting.");
|
||||||
|
skippedVer = null;
|
||||||
|
if (File.Exists(Path.Combine(GlobalVars.saveDirectory, "skip.envy")))
|
||||||
|
File.Delete(Path.Combine(GlobalVars.saveDirectory, "skip.envy"));
|
||||||
|
buttonSkipVersion.ToolTip = Properties.Resources.ui_skipversion;
|
||||||
|
buttonSkipVersion.IsEnabled = true;
|
||||||
|
buttonSkipVersion.Visibility = Visibility.Visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if update file already exists and display install button instead
|
||||||
|
if (File.Exists(Path.Combine(GlobalVars.saveDirectory, onlineDriv + "-nvidia-installer.exe")))
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Found downloaded driver installer, no need to redownload.");
|
||||||
|
buttonDownload.Visibility = Visibility.Collapsed;
|
||||||
|
buttonInstall.Visibility = Visibility.Visible;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void switchStudioDriver_Unchecked(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if (File.Exists(Path.Combine(GlobalVars.saveDirectory, "sd.envy")))
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Switching to game ready driver.");
|
||||||
|
File.Delete(Path.Combine(GlobalVars.saveDirectory, "sd.envy"));
|
||||||
|
Load();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void switchStudioDriver_Checked(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if (!File.Exists(Path.Combine(GlobalVars.saveDirectory, "sd.envy")))
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Switching to studio driver.");
|
||||||
|
File.Create(Path.Combine(GlobalVars.saveDirectory, "sd.envy")).Close();
|
||||||
|
Load();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void switchAutostart_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if (File.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup), "EnvyUpdate.lnk")))
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Removing autostart entry.");
|
||||||
|
File.Delete(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup), "EnvyUpdate.lnk"));
|
||||||
|
}
|
||||||
|
if (switchAutostart.IsChecked == true)
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Creating autostart entry.");
|
||||||
|
Util.CreateShortcut("EnvyUpdate", Environment.GetFolderPath(Environment.SpecialFolder.Startup), GlobalVars.pathToAppExe, "NVidia Update Checker", "/minimize");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void buttonSkipVersion_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Skipping version.");
|
||||||
|
skippedVer = onlineDriv;
|
||||||
|
File.WriteAllText(Path.Combine(GlobalVars.saveDirectory, "skip.envy"), onlineDriv);
|
||||||
|
buttonSkipVersion.IsEnabled = false;
|
||||||
|
buttonSkipVersion.ToolTip = Properties.Resources.ui_skipped;
|
||||||
|
MessageBox.Show(Properties.Resources.skip_confirm);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateLocalVer(bool reloadLocalDriv = true)
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Updating local driver version in UI.");
|
||||||
|
if (reloadLocalDriv)
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Reloading local driver version.");
|
||||||
|
localDriv = Util.GetLocDriv();
|
||||||
|
}
|
||||||
|
cardLocal.Header = localDriv;
|
||||||
|
if (GlobalVars.isMobile)
|
||||||
|
textblockGPUName.Text = Util.GetGPUName(false) + " (mobile)";
|
||||||
|
else
|
||||||
|
textblockGPUName.Text = Util.GetGPUName(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DriverFileChanged(object sender, FileSystemEventArgs e)
|
||||||
|
{
|
||||||
|
if (!GlobalVars.isInstalling && (DateTime.UtcNow.Subtract(lastFileChanged).TotalMinutes > 1))
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Watched driver file changed! Reloading data.");
|
||||||
|
System.Threading.Thread.Sleep(10000);
|
||||||
|
lastFileChanged = DateTime.UtcNow;
|
||||||
|
Application.Current.Dispatcher.Invoke(delegate
|
||||||
|
{
|
||||||
|
UpdateLocalVer();
|
||||||
|
Load();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CardOnline_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Opening download page.");
|
||||||
|
Process.Start(gpuURL);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetInfoBar (bool good)
|
||||||
|
{
|
||||||
|
if (good)
|
||||||
|
{
|
||||||
|
infoBarStatus.Severity = Wpf.Ui.Controls.InfoBarSeverity.Success;
|
||||||
|
infoBarStatus.Title = Properties.Resources.ui_info_uptodate;
|
||||||
|
infoBarStatus.Message = Properties.Resources.ui_message_good;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
infoBarStatus.Severity = Wpf.Ui.Controls.InfoBarSeverity.Warning;
|
||||||
|
infoBarStatus.Title = Properties.Resources.ui_info_outdated;
|
||||||
|
infoBarStatus.Message = Properties.Resources.ui_message_update;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void buttonDownload_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if (GlobalVars.isDownloading)
|
||||||
|
{
|
||||||
|
Debug.LogToFile("WARN A download is already running.");
|
||||||
|
ShowSnackbar(Wpf.Ui.Common.ControlAppearance.Danger, Wpf.Ui.Common.SymbolRegular.ErrorCircle24, Properties.Resources.info_download_running, Properties.Resources.info_download_running_title);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
progressbarDownload.Visibility = Visibility.Visible;
|
||||||
|
buttonDownload.IsEnabled = false;
|
||||||
|
GlobalVars.isDownloading = true;
|
||||||
|
|
||||||
|
if (File.Exists(Path.Combine(GlobalVars.saveDirectory, onlineDriv + "-nvidia-installer.exe.downloading")))
|
||||||
|
{
|
||||||
|
Debug.LogToFile("WARN Found previous unfinished download, retrying.");
|
||||||
|
File.Delete(Path.Combine(GlobalVars.saveDirectory, onlineDriv + "-nvidia-installer.exe.downloading"));
|
||||||
|
}
|
||||||
|
Thread thread = new Thread(() => {
|
||||||
|
using (WebClient client = new WebClient())
|
||||||
|
{
|
||||||
|
client.Headers["User-Agent"] = GlobalVars.useragent;
|
||||||
|
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
|
||||||
|
client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
|
||||||
|
client.DownloadFileAsync(new Uri(Util.GetDirectDownload(gpuURL)), Path.Combine(GlobalVars.saveDirectory, onlineDriv + "-nvidia-installer.exe.downloading"));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
thread.Start();
|
||||||
|
Debug.LogToFile("INFO Started installer download.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
|
||||||
|
{
|
||||||
|
double bytesIn = double.Parse(e.BytesReceived.ToString());
|
||||||
|
double totalBytes = double.Parse(e.TotalBytesToReceive.ToString());
|
||||||
|
double percentage = bytesIn / totalBytes * 100;
|
||||||
|
Application.Current.Dispatcher.Invoke(new Action(() => {
|
||||||
|
progressbarDownload.Value = int.Parse(Math.Truncate(percentage).ToString());
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
|
||||||
|
{
|
||||||
|
Application.Current.Dispatcher.Invoke(new Action(() => {
|
||||||
|
buttonDownload.IsEnabled = true;
|
||||||
|
progressbarDownload.Visibility = Visibility.Collapsed;
|
||||||
|
GlobalVars.isDownloading = false;
|
||||||
|
}));
|
||||||
|
if (e.Error == null)
|
||||||
|
{
|
||||||
|
Application.Current.Dispatcher.Invoke(new Action(() => {
|
||||||
|
ShowSnackbar(Wpf.Ui.Common.ControlAppearance.Success, Wpf.Ui.Common.SymbolRegular.CheckmarkCircle24, Properties.Resources.info_download_success, Properties.Resources.info_download_success_title);
|
||||||
|
buttonDownload.Visibility = Visibility.Collapsed;
|
||||||
|
buttonInstall.Visibility = Visibility.Visible;
|
||||||
|
Debug.LogToFile("INFO Download successful.");
|
||||||
|
}));
|
||||||
|
if (File.Exists(Path.Combine(GlobalVars.saveDirectory, onlineDriv + "-nvidia-installer.exe")))
|
||||||
|
File.Delete(Path.Combine(GlobalVars.saveDirectory, onlineDriv + "-nvidia-installer.exe"));
|
||||||
|
File.Move(Path.Combine(GlobalVars.saveDirectory, onlineDriv + "-nvidia-installer.exe.downloading"), Path.Combine(GlobalVars.saveDirectory, onlineDriv + "-nvidia-installer.exe"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
File.Delete(Path.Combine(GlobalVars.saveDirectory, onlineDriv + "-nvidia-installer.exe.downloading"));
|
||||||
|
Application.Current.Dispatcher.Invoke(new Action(() => {
|
||||||
|
ShowSnackbar(Wpf.Ui.Common.ControlAppearance.Danger, Wpf.Ui.Common.SymbolRegular.ErrorCircle24, Properties.Resources.info_download_error, Properties.Resources.info_download_error_title);
|
||||||
|
Debug.LogToFile("INFO Download NOT successful. Error: " + e.Error.ToString());
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private void buttonInstall_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
buttonInstall.IsEnabled = false;
|
||||||
|
GlobalVars.isInstalling = true;
|
||||||
|
string sevenZipPath = Util.GetSevenZip();
|
||||||
|
|
||||||
|
ShowSnackbar(Wpf.Ui.Common.ControlAppearance.Info, Wpf.Ui.Common.SymbolRegular.FolderZip24, Properties.Resources.info_extracting, Properties.Resources.info_extracting_title);
|
||||||
|
|
||||||
|
string filePath = Path.Combine(GlobalVars.saveDirectory, onlineDriv + "-nvidia-installer.exe");
|
||||||
|
string destinationDir = Path.Combine(GlobalVars.saveDirectory, onlineDriv + "-extracted");
|
||||||
|
|
||||||
|
if (!Directory.Exists(destinationDir))
|
||||||
|
Directory.CreateDirectory(destinationDir);
|
||||||
|
|
||||||
|
Debug.LogToFile("INFO Starting extraction of driver files.");
|
||||||
|
|
||||||
|
Process process = new Process();
|
||||||
|
ProcessStartInfo startInfo = new ProcessStartInfo
|
||||||
|
{
|
||||||
|
WindowStyle = ProcessWindowStyle.Minimized,
|
||||||
|
WorkingDirectory = destinationDir,
|
||||||
|
FileName = sevenZipPath,
|
||||||
|
Arguments = "x -aoa -y \"" + filePath + "\" Display.Driver Display.Nview Display.Optimus HDAudio MSVCR NVI2 NVPCF PhysX PPC ShieldWirelessController EULA.txt ListDevices.txt setup.cfg setup.exe"
|
||||||
|
};
|
||||||
|
process.EnableRaisingEvents = true;
|
||||||
|
process.StartInfo = startInfo;
|
||||||
|
process.Exited += new EventHandler(ExtractionFinished);
|
||||||
|
process.Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ExtractionFinished(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
string extractedPath = Path.Combine(GlobalVars.saveDirectory, onlineDriv + "-extracted");
|
||||||
|
Application.Current.Dispatcher.Invoke(new Action(() => {
|
||||||
|
ShowSnackbar(Wpf.Ui.Common.ControlAppearance.Success, Wpf.Ui.Common.SymbolRegular.FolderZip24, Properties.Resources.info_extract_complete, Properties.Resources.info_extract_complete_title);
|
||||||
|
}));
|
||||||
|
Debug.LogToFile("INFO Extraction exited, deleting 7-zip executable.");
|
||||||
|
|
||||||
|
File.Delete(Path.Combine(GlobalVars.saveDirectory, "7zr.exe"));
|
||||||
|
|
||||||
|
Util.CleanInstallConfig(Path.Combine(extractedPath, "setup.cfg"));
|
||||||
|
|
||||||
|
Debug.LogToFile("Starting driver setup.");
|
||||||
|
|
||||||
|
Process process = new Process();
|
||||||
|
ProcessStartInfo startInfo = new ProcessStartInfo
|
||||||
|
{
|
||||||
|
WindowStyle = ProcessWindowStyle.Normal,
|
||||||
|
WorkingDirectory = extractedPath,
|
||||||
|
FileName = "setup.exe",
|
||||||
|
Arguments = "-passive -noreboot -noeula"
|
||||||
|
};
|
||||||
|
process.EnableRaisingEvents = true;
|
||||||
|
process.StartInfo = startInfo;
|
||||||
|
process.Exited += new EventHandler(InstallFinished);
|
||||||
|
process.Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void InstallFinished(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Application.Current.Dispatcher.Invoke(new Action(() => {
|
||||||
|
ShowSnackbar(Wpf.Ui.Common.ControlAppearance.Success, Wpf.Ui.Common.SymbolRegular.CheckmarkCircle24, Properties.Resources.info_install_complete, Properties.Resources.info_install_complete_title);
|
||||||
|
buttonInstall.IsEnabled = true;
|
||||||
|
buttonInstall.Visibility = Visibility.Collapsed;
|
||||||
|
buttonDownload.IsEnabled = true;
|
||||||
|
buttonDownload.Visibility = Visibility.Collapsed;
|
||||||
|
}));
|
||||||
|
|
||||||
|
Debug.LogToFile("INFO Driver setup complete. Cleaning up setup files.");
|
||||||
|
|
||||||
|
File.Delete(Path.Combine(GlobalVars.saveDirectory, onlineDriv + "-nvidia-installer.exe"));
|
||||||
|
Directory.Delete(Path.Combine(GlobalVars.saveDirectory, onlineDriv + "-extracted"), true);
|
||||||
|
GlobalVars.isInstalling = false;
|
||||||
|
Application.Current.Dispatcher.Invoke(delegate
|
||||||
|
{
|
||||||
|
UpdateLocalVer();
|
||||||
|
Load();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ShowSnackbar(Wpf.Ui.Common.ControlAppearance appearance, Wpf.Ui.Common.SymbolRegular icon, string message = "", string title = "")
|
||||||
|
{
|
||||||
|
snackbarInfo.Appearance = appearance;
|
||||||
|
snackbarInfo.Icon = icon;
|
||||||
|
snackbarInfo.Title = title;
|
||||||
|
snackbarInfo.Message = message;
|
||||||
|
snackbarInfo.Show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -15,9 +15,6 @@ namespace EnvyUpdate
|
||||||
public static bool isVerbose = false;
|
public static bool isVerbose = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
public static string debugFile = Path.Combine(GlobalVars.exedirectory, "envyupdate.log");
|
|
||||||
|
|
||||||
public static int LoadFakeIDs(string idType)
|
public static int LoadFakeIDs(string idType)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
@ -52,7 +49,12 @@ namespace EnvyUpdate
|
||||||
public static void LogToFile(string content)
|
public static void LogToFile(string content)
|
||||||
{
|
{
|
||||||
if (isVerbose)
|
if (isVerbose)
|
||||||
System.IO.File.AppendAllText(Debug.debugFile, content + "\n");
|
{
|
||||||
|
if (GlobalVars.useAppdata)
|
||||||
|
File.AppendAllText(Path.Combine(GlobalVars.appdata, "envyupdate.log"), content + "\n");
|
||||||
|
else
|
||||||
|
File.AppendAllText(Path.Combine(GlobalVars.directoryOfExe, "envyupdate.log"), content + "\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,6 +72,68 @@
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ApplicationManifest>app.manifest</ApplicationManifest>
|
<ApplicationManifest>app.manifest</ApplicationManifest>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<OutputPath>bin\x86\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<PlatformTarget>x86</PlatformTarget>
|
||||||
|
<LangVersion>7.3</LangVersion>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<Prefer32Bit>true</Prefer32Bit>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||||
|
<OutputPath>bin\x86\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<PlatformTarget>x86</PlatformTarget>
|
||||||
|
<LangVersion>7.3</LangVersion>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<Prefer32Bit>true</Prefer32Bit>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug - ignoregpu|x86'">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<OutputPath>bin\x86\Debug - ignoregpu\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<PlatformTarget>x86</PlatformTarget>
|
||||||
|
<LangVersion>7.3</LangVersion>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<Prefer32Bit>true</Prefer32Bit>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<OutputPath>bin\x64\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
|
<LangVersion>7.3</LangVersion>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<Prefer32Bit>true</Prefer32Bit>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||||
|
<OutputPath>bin\x64\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
|
<LangVersion>7.3</LangVersion>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<Prefer32Bit>true</Prefer32Bit>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug - ignoregpu|x64'">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<OutputPath>bin\x64\Debug - ignoregpu\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
|
<LangVersion>7.3</LangVersion>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<Prefer32Bit>true</Prefer32Bit>
|
||||||
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Microsoft.Build.Framework" />
|
<Reference Include="Microsoft.Build.Framework" />
|
||||||
<Reference Include="Microsoft.Build.Utilities.v4.0" />
|
<Reference Include="Microsoft.Build.Utilities.v4.0" />
|
||||||
|
@ -100,21 +162,25 @@
|
||||||
</ApplicationDefinition>
|
</ApplicationDefinition>
|
||||||
<Compile Include="Debug.cs" />
|
<Compile Include="Debug.cs" />
|
||||||
<Compile Include="GlobalVars.cs" />
|
<Compile Include="GlobalVars.cs" />
|
||||||
<Compile Include="InfoWindow.xaml.cs">
|
|
||||||
<DependentUpon>InfoWindow.xaml</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Notify.cs" />
|
<Compile Include="Notify.cs" />
|
||||||
|
<Compile Include="DashboardPage.xaml.cs">
|
||||||
|
<DependentUpon>DashboardPage.xaml</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Properties\Licenses.Designer.cs">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
<DependentUpon>Licenses.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
<Compile Include="Properties\Resources.de.Designer.cs">
|
<Compile Include="Properties\Resources.de.Designer.cs">
|
||||||
<DependentUpon>Resources.de.resx</DependentUpon>
|
<DependentUpon>Resources.de.resx</DependentUpon>
|
||||||
<AutoGen>True</AutoGen>
|
<AutoGen>True</AutoGen>
|
||||||
<DesignTime>True</DesignTime>
|
<DesignTime>True</DesignTime>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="SettingsPage.xaml.cs">
|
||||||
|
<DependentUpon>SettingsPage.xaml</DependentUpon>
|
||||||
|
</Compile>
|
||||||
<Compile Include="StringExt.cs" />
|
<Compile Include="StringExt.cs" />
|
||||||
<Compile Include="Util.cs" />
|
<Compile Include="Util.cs" />
|
||||||
<Page Include="InfoWindow.xaml">
|
|
||||||
<SubType>Designer</SubType>
|
|
||||||
<Generator>MSBuild:Compile</Generator>
|
|
||||||
</Page>
|
|
||||||
<Page Include="MainWindow.xaml">
|
<Page Include="MainWindow.xaml">
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
|
@ -127,6 +193,14 @@
|
||||||
<DependentUpon>MainWindow.xaml</DependentUpon>
|
<DependentUpon>MainWindow.xaml</DependentUpon>
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Page Include="DashboardPage.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
</Page>
|
||||||
|
<Page Include="SettingsPage.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
</Page>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Properties\AssemblyInfo.cs">
|
<Compile Include="Properties\AssemblyInfo.cs">
|
||||||
|
@ -142,6 +216,10 @@
|
||||||
<DependentUpon>Settings.settings</DependentUpon>
|
<DependentUpon>Settings.settings</DependentUpon>
|
||||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<EmbeddedResource Include="Properties\Licenses.resx">
|
||||||
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Licenses.Designer.cs</LastGenOutput>
|
||||||
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="Properties\Resources.de.resx">
|
<EmbeddedResource Include="Properties\Resources.de.resx">
|
||||||
<Generator>PublicResXFileCodeGenerator</Generator>
|
<Generator>PublicResXFileCodeGenerator</Generator>
|
||||||
<LastGenOutput>Resources.de.Designer.cs</LastGenOutput>
|
<LastGenOutput>Resources.de.Designer.cs</LastGenOutput>
|
||||||
|
@ -189,17 +267,14 @@
|
||||||
</BootstrapperPackage>
|
</BootstrapperPackage>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Costura.Fody" PrivateAssets="All">
|
<PackageReference Include="Costura.Fody" PrivateAssets="all">
|
||||||
<Version>4.1.0</Version>
|
<Version>5.7.0</Version>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="Fody">
|
<PackageReference Include="Fody">
|
||||||
<Version>6.6.4</Version>
|
<Version>6.8.1</Version>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="Hardcodet.NotifyIcon.Wpf">
|
|
||||||
<Version>1.1.0</Version>
|
|
||||||
</PackageReference>
|
|
||||||
<PackageReference Include="Microsoft.Toolkit.Uwp.Notifications">
|
<PackageReference Include="Microsoft.Toolkit.Uwp.Notifications">
|
||||||
<Version>7.1.3</Version>
|
<Version>7.1.3</Version>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
@ -207,7 +282,10 @@
|
||||||
<Version>2.2.0</Version>
|
<Version>2.2.0</Version>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="System.Text.Json">
|
<PackageReference Include="System.Text.Json">
|
||||||
<Version>7.0.1</Version>
|
<Version>8.0.4</Version>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="WPF-UI">
|
||||||
|
<Version>2.1.0</Version>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
|
|
@ -17,6 +17,16 @@
|
||||||
<xs:documentation>A list of assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks.</xs:documentation>
|
<xs:documentation>A list of assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks.</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
<xs:element minOccurs="0" maxOccurs="1" name="ExcludeRuntimeAssemblies" type="xs:string">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element minOccurs="0" maxOccurs="1" name="IncludeRuntimeAssemblies" type="xs:string">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks.</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:element>
|
||||||
<xs:element minOccurs="0" maxOccurs="1" name="Unmanaged32Assemblies" type="xs:string">
|
<xs:element minOccurs="0" maxOccurs="1" name="Unmanaged32Assemblies" type="xs:string">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>A list of unmanaged 32 bit assembly names to include, delimited with line breaks.</xs:documentation>
|
<xs:documentation>A list of unmanaged 32 bit assembly names to include, delimited with line breaks.</xs:documentation>
|
||||||
|
@ -43,6 +53,16 @@
|
||||||
<xs:documentation>Controls if .pdbs for reference assemblies are also embedded.</xs:documentation>
|
<xs:documentation>Controls if .pdbs for reference assemblies are also embedded.</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:attribute>
|
</xs:attribute>
|
||||||
|
<xs:attribute name="IncludeRuntimeReferences" type="xs:boolean">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Controls if runtime assemblies are also embedded.</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute name="UseRuntimeReferencePaths" type="xs:boolean">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Controls whether the runtime assemblies are embedded with their full path or only with their assembly name.</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
<xs:attribute name="DisableCompression" type="xs:boolean">
|
<xs:attribute name="DisableCompression" type="xs:boolean">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>Embedded assemblies are compressed by default, and uncompressed when they are loaded. You can turn compression off with this option.</xs:documentation>
|
<xs:documentation>Embedded assemblies are compressed by default, and uncompressed when they are loaded. You can turn compression off with this option.</xs:documentation>
|
||||||
|
@ -73,6 +93,16 @@
|
||||||
<xs:documentation>A list of assembly names to include from the default action of "embed all Copy Local references", delimited with |.</xs:documentation>
|
<xs:documentation>A list of assembly names to include from the default action of "embed all Copy Local references", delimited with |.</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:attribute>
|
</xs:attribute>
|
||||||
|
<xs:attribute name="ExcludeRuntimeAssemblies" type="xs:string">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with |</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute name="IncludeRuntimeAssemblies" type="xs:string">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with |.</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
<xs:attribute name="Unmanaged32Assemblies" type="xs:string">
|
<xs:attribute name="Unmanaged32Assemblies" type="xs:string">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>A list of unmanaged 32 bit assembly names to include, delimited with |.</xs:documentation>
|
<xs:documentation>A list of unmanaged 32 bit assembly names to include, delimited with |.</xs:documentation>
|
||||||
|
|
|
@ -6,11 +6,20 @@ namespace EnvyUpdate
|
||||||
class GlobalVars
|
class GlobalVars
|
||||||
{
|
{
|
||||||
public static bool isMobile = false;
|
public static bool isMobile = false;
|
||||||
public static readonly string exeloc = System.Reflection.Assembly.GetEntryAssembly().Location;
|
public static readonly string pathToAppExe = System.Reflection.Assembly.GetEntryAssembly().Location;
|
||||||
public static readonly string exedirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location) + "\\";
|
public static readonly string directoryOfExe = Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
|
||||||
|
public static string saveDirectory = directoryOfExe;
|
||||||
public static readonly string startmenu = Environment.GetFolderPath(Environment.SpecialFolder.StartMenu);
|
public static readonly string startmenu = Environment.GetFolderPath(Environment.SpecialFolder.StartMenu);
|
||||||
public static readonly string appdata = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\envyupdate\\";
|
public static readonly string legacyAppdata = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\envyupdate\\";
|
||||||
|
public static readonly string appdata = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "EnvyUpdate_Data");
|
||||||
public static readonly string startup = Environment.GetFolderPath(Environment.SpecialFolder.Startup);
|
public static readonly string startup = Environment.GetFolderPath(Environment.SpecialFolder.Startup);
|
||||||
public static bool monitoringInstall = false;
|
public static bool monitoringInstall = false;
|
||||||
|
public static bool startMinimized = false;
|
||||||
|
public static bool isInstalling = false;
|
||||||
|
public static readonly string useragent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:115.0) Gecko/20100101 Firefox/115.0";
|
||||||
|
public static bool useAppdata = false;
|
||||||
|
public static bool hasWrite = true;
|
||||||
|
public static bool autoDownload = false;
|
||||||
|
public static bool isDownloading = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -1,56 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Input;
|
|
||||||
using System.IO;
|
|
||||||
|
|
||||||
namespace EnvyUpdate
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Interaction logic for InfoWindow.xaml
|
|
||||||
/// </summary>
|
|
||||||
public partial class InfoWindow : Window
|
|
||||||
{
|
|
||||||
public InfoWindow()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
|
|
||||||
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
|
|
||||||
System.Diagnostics.FileVersionInfo fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location);
|
|
||||||
string version = fvi.FileVersion;
|
|
||||||
|
|
||||||
labelVer.Content += " " + version;
|
|
||||||
if (GlobalVars.monitoringInstall)
|
|
||||||
labelVer.FontStyle = FontStyles.Italic;
|
|
||||||
|
|
||||||
if (File.Exists(Path.Combine(GlobalVars.exedirectory, "envyupdate.log")))
|
|
||||||
chkLog.IsChecked = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ButtonWeb_Click(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Launching website.");
|
|
||||||
System.Diagnostics.Process.Start("https://github.com/fyr77/EnvyUpdate/");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void chkLog_Checked(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
if (!Debug.isVerbose)
|
|
||||||
{
|
|
||||||
Debug.isVerbose = true;
|
|
||||||
Debug.LogToFile("------");
|
|
||||||
Debug.LogToFile("INFO Enabled logging to file. Restart Application to see full startup log.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void chkLog_Unchecked(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
if (Debug.isVerbose)
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Disabled logging to file.");
|
|
||||||
if (File.Exists(Path.Combine(GlobalVars.exedirectory, "envyupdate.log")))
|
|
||||||
File.Move(Path.Combine(GlobalVars.exedirectory, "envyupdate.log"), Path.Combine(GlobalVars.exedirectory, "envyupdate." + DateTime.Now.ToString("yyyyMMdd-HHmmss") + ".log"));
|
|
||||||
Debug.isVerbose = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,4 +1,4 @@
|
||||||
<Window x:Class="EnvyUpdate.MainWindow"
|
<ui:UiWindow x:Class="EnvyUpdate.MainWindow"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
@ -6,26 +6,59 @@
|
||||||
xmlns:local="clr-namespace:EnvyUpdate"
|
xmlns:local="clr-namespace:EnvyUpdate"
|
||||||
xmlns:p="clr-namespace:EnvyUpdate.Properties"
|
xmlns:p="clr-namespace:EnvyUpdate.Properties"
|
||||||
xmlns:tb="http://www.hardcodet.net/taskbar"
|
xmlns:tb="http://www.hardcodet.net/taskbar"
|
||||||
|
xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml"
|
||||||
mc:Ignorable="d"
|
mc:Ignorable="d"
|
||||||
Title="EnvyUpdate" Height="270" Width="389" Icon="icon.ico" StateChanged="Window_StateChanged" Closing="Window_Closing" ResizeMode="CanMinimize">
|
ExtendsContentIntoTitleBar="True"
|
||||||
<Grid Margin="0,0,0,0">
|
WindowBackdropType="Mica"
|
||||||
|
|
||||||
|
Title="EnvyUpdate" MinHeight="500" Height="550" MinWidth="700" Width="750" Icon="icon.ico" StateChanged="Window_StateChanged" Closing="Window_Closing" ResizeMode="CanMinimize" WindowStyle="None">
|
||||||
|
<Grid>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="17*"/>
|
<RowDefinition Height="Auto" />
|
||||||
<RowDefinition Height="86*"/>
|
<RowDefinition Height="*" />
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<tb:TaskbarIcon IconSource="/icon.ico" ToolTipText="EnvyUpdate" TrayLeftMouseDown="TaskbarIcon_TrayLeftMouseDown" Grid.RowSpan="3" />
|
<ui:TitleBar
|
||||||
<TextBlock HorizontalAlignment="Left" Margin="10,81,0,0" TextWrapping="Wrap" FontWeight="Bold" Width="140" Height="16" VerticalAlignment="Top" Grid.Row="1"><Run Text="{x:Static p:Resources.ui_localdriver}"/></TextBlock>
|
Title="EnvyUpdate"
|
||||||
<TextBlock x:Name="textblockGPU" HorizontalAlignment="Right" Margin="0,81,10,0" TextWrapping="Wrap" Text="<none>" Width="134" Height="16" VerticalAlignment="Top" TextAlignment="Right" Grid.Row="1"/>
|
Grid.Row="0"
|
||||||
<Button x:Name="buttonHelp" Content="..." Margin="0,12,10,0" Click="buttonHelp_Click" HorizontalAlignment="Right" Width="20" Height="20" VerticalAlignment="Top" Grid.RowSpan="2"/>
|
CanMaximize="False"
|
||||||
<TextBlock Margin="10,102,0,0" TextWrapping="Wrap" FontWeight="Bold" Grid.Row="1" HorizontalAlignment="Left" Width="140" Height="16" VerticalAlignment="Top"><Run Text="{x:Static p:Resources.ui_onlinedriver}"/></TextBlock>
|
ShowMaximize="False"
|
||||||
<TextBlock x:Name="textblockOnline" HorizontalAlignment="Right" Margin="0,102,10,0" TextWrapping="Wrap" Text="<none>" Width="134" Grid.Row="1" Height="16" VerticalAlignment="Top" TextAlignment="Right"/>
|
Icon="/icon.ico">
|
||||||
<Button x:Name="buttonDL" Content="⟱" Margin="10,151,10,10" FontSize="20" Click="buttonDL_Click" Foreground="White" Background="#FF3CDA00" Grid.Row="1" IsEnabled="False"/>
|
<ui:TitleBar.Tray>
|
||||||
<TextBlock x:Name="textblockGPUName" Margin="10,14,35,0" TextWrapping="Wrap" Text="GPU..." Height="16" VerticalAlignment="Top" TextAlignment="Center" Grid.RowSpan="2" FontWeight="Bold"/>
|
<ui:NotifyIcon
|
||||||
<TextBlock HorizontalAlignment="Left" Margin="10,19,0,0" TextWrapping="Wrap" FontWeight="Bold" Width="140" Height="16" VerticalAlignment="Top" Grid.Row="1" Text="{x:Static p:Resources.ui_localdriver_type}"/>
|
LeftClick="NotifyIcon_LeftClick"
|
||||||
<TextBlock x:Name="textblockLocalType" HorizontalAlignment="Right" Margin="0,19,10,0" TextWrapping="Wrap" Width="134" Height="16" VerticalAlignment="Top" TextAlignment="Right" Grid.Row="1"><Run Text="<none>"/><LineBreak/><Run/></TextBlock>
|
Icon="/icon.ico"
|
||||||
<RadioButton x:Name="radioGRD" Content="Game Ready / Standard Driver" HorizontalAlignment="Left" Margin="10,40,0,0" Grid.Row="1" VerticalAlignment="Top" Checked="radioGRD_Checked"/>
|
MenuOnRightClick="False"
|
||||||
<RadioButton x:Name="radioSD" Content="Studio Driver" HorizontalAlignment="Left" Margin="10,60,0,0" Grid.Row="1" VerticalAlignment="Top" Checked="radioSD_Checked"/>
|
TooltipText="EnvyUpdate">
|
||||||
<CheckBox x:Name="chkAutostart" Content="{x:Static p:Resources.ui_autostart}" HorizontalAlignment="Left" Margin="10,131,0,0" Grid.Row="1" VerticalAlignment="Top" Click="chkAutostart_Click"/>
|
</ui:NotifyIcon>
|
||||||
<Button x:Name="buttonSkip" Content="{x:Static p:Resources.ui_skipversion}" Margin="0,131,10,0" Grid.Row="1" VerticalAlignment="Top" HorizontalAlignment="Right" Click="buttonSkip_Click" IsEnabled="False"/>
|
</ui:TitleBar.Tray>
|
||||||
|
</ui:TitleBar>
|
||||||
|
<Grid Grid.Row="1">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
<ColumnDefinition Width="*" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<ui:NavigationCompact
|
||||||
|
x:Name="RootNavigation"
|
||||||
|
Frame="{Binding ElementName=MainFrame}"
|
||||||
|
Grid.Column="0"
|
||||||
|
SelectedPageIndex="0">
|
||||||
|
<ui:NavigationCompact.Items>
|
||||||
|
<ui:NavigationItem
|
||||||
|
Content="{x:Static p:Resources.ui_home}"
|
||||||
|
Icon="Home24"
|
||||||
|
PageType="{x:Type local:DashboardPage}"
|
||||||
|
/>
|
||||||
|
</ui:NavigationCompact.Items>
|
||||||
|
<ui:NavigationCompact.Footer>
|
||||||
|
<ui:NavigationItem
|
||||||
|
Content="{x:Static p:Resources.ui_settings}"
|
||||||
|
Icon="Settings24"
|
||||||
|
PageType="{x:Type local:SettingsPage}"/>
|
||||||
|
</ui:NavigationCompact.Footer>
|
||||||
|
</ui:NavigationCompact>
|
||||||
|
<Frame
|
||||||
|
x:Name="MainFrame"
|
||||||
|
Grid.Column="1" />
|
||||||
</Grid>
|
</Grid>
|
||||||
</Window>
|
</Grid>
|
||||||
|
</ui:UiWindow>
|
||||||
|
|
|
@ -1,27 +1,18 @@
|
||||||
using Microsoft.Toolkit.Uwp.Notifications;
|
using Microsoft.Toolkit.Uwp.Notifications;
|
||||||
|
using Microsoft.Win32;
|
||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Management;
|
|
||||||
using System.Net;
|
|
||||||
using System.Text.RegularExpressions;
|
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Media;
|
|
||||||
using System.Windows.Threading;
|
|
||||||
|
|
||||||
namespace EnvyUpdate
|
namespace EnvyUpdate
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Interaction logic for MainWindow.xaml
|
/// Interaction logic for MainWindow.xaml
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class MainWindow : Window
|
public partial class MainWindow
|
||||||
{
|
{
|
||||||
private string localDriv = null;
|
|
||||||
private string onlineDriv = null;
|
|
||||||
private string gpuURL = null;
|
|
||||||
private string[] arguments = null;
|
private string[] arguments = null;
|
||||||
private string skippedVer = null;
|
|
||||||
|
|
||||||
public MainWindow()
|
public MainWindow()
|
||||||
{
|
{
|
||||||
|
@ -37,8 +28,22 @@ namespace EnvyUpdate
|
||||||
// This is necessary, since .NET throws an exception if you check for a non-existant arg.
|
// This is necessary, since .NET throws an exception if you check for a non-existant arg.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!Util.HasWritePermissions())
|
||||||
|
{
|
||||||
|
if (!Directory.Exists(GlobalVars.appdata))
|
||||||
|
Directory.CreateDirectory(GlobalVars.appdata);
|
||||||
|
|
||||||
|
GlobalVars.hasWrite = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Directory.Exists(GlobalVars.appdata))
|
||||||
|
{
|
||||||
|
GlobalVars.useAppdata = true;
|
||||||
|
GlobalVars.saveDirectory = GlobalVars.appdata;
|
||||||
|
}
|
||||||
|
|
||||||
// Check if Debug file exists
|
// Check if Debug file exists
|
||||||
if (File.Exists(Path.Combine(GlobalVars.exedirectory, "envyupdate.log")))
|
if (File.Exists(Path.Combine(GlobalVars.saveDirectory, "envyupdate.log")))
|
||||||
{
|
{
|
||||||
Debug.isVerbose = true;
|
Debug.isVerbose = true;
|
||||||
Debug.LogToFile("------");
|
Debug.LogToFile("------");
|
||||||
|
@ -46,6 +51,15 @@ namespace EnvyUpdate
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.LogToFile("INFO Starting EnvyUpdate, version " + System.Diagnostics.FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).FileVersion);
|
Debug.LogToFile("INFO Starting EnvyUpdate, version " + System.Diagnostics.FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).FileVersion);
|
||||||
|
Debug.LogToFile("INFO Save directory: " + GlobalVars.saveDirectory);
|
||||||
|
|
||||||
|
// Check if running on supported Windows version.
|
||||||
|
if (Environment.OSVersion.Version.Major < 10)
|
||||||
|
{
|
||||||
|
Debug.LogToFile("FATAL Unsupported OS version, terminating.");
|
||||||
|
MessageBox.Show(Properties.Resources.unsupported_os);
|
||||||
|
Environment.Exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
// Check if EnvyUpdate is already running
|
// Check if EnvyUpdate is already running
|
||||||
if (Util.IsInstanceOpen("EnvyUpdate"))
|
if (Util.IsInstanceOpen("EnvyUpdate"))
|
||||||
|
@ -56,265 +70,58 @@ namespace EnvyUpdate
|
||||||
Environment.Exit(1);
|
Environment.Exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete installed legacy versions
|
// Check dark theme
|
||||||
if (Directory.Exists(GlobalVars.appdata))
|
AdjustTheme();
|
||||||
|
SystemEvents.UserPreferenceChanged += AdjustTheme;
|
||||||
|
|
||||||
|
// Delete installed legacy versions, required for people upgrading from very old versions.
|
||||||
|
if (Directory.Exists(GlobalVars.legacyAppdata))
|
||||||
{
|
{
|
||||||
Debug.LogToFile("INFO Found old appdata installation, uninstalling.");
|
Debug.LogToFile("INFO Found legacy appdata installation, uninstalling.");
|
||||||
UninstallAll();
|
Util.UninstallAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
GlobalVars.isMobile = Util.IsMobile();
|
// Allow for running using a fake graphics card if no nvidia card is present.
|
||||||
Debug.LogToFile("INFO Mobile: " + GlobalVars.isMobile);
|
|
||||||
|
|
||||||
localDriv = Util.GetLocDriv();
|
|
||||||
|
|
||||||
Debug.LogToFile("INFO Local driver version: " + localDriv);
|
|
||||||
|
|
||||||
if (localDriv != null)
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Local driver version already known, updating info without reloading.");
|
|
||||||
UpdateLocalVer(false);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (arguments.Contains("/fake"))
|
if (arguments.Contains("/fake"))
|
||||||
{
|
{
|
||||||
Debug.isFake = true;
|
Debug.isFake = true;
|
||||||
Debug.LogToFile("WARN Faking GPU with debug info.");
|
Debug.LogToFile("WARN Faking GPU with debug info.");
|
||||||
}
|
}
|
||||||
else
|
else if (!Util.IsNvidia())
|
||||||
{
|
{
|
||||||
Debug.LogToFile("FATAL No supported GPU found, terminating.");
|
Debug.LogToFile("FATAL No supported GPU found, terminating.");
|
||||||
MessageBox.Show(Properties.Resources.no_compatible_gpu);
|
MessageBox.Show(Properties.Resources.no_compatible_gpu);
|
||||||
Environment.Exit(255);
|
Environment.Exit(255);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
Debug.LogToFile("INFO Detecting driver type.");
|
|
||||||
|
|
||||||
if (Util.IsDCH())
|
|
||||||
textblockLocalType.Text = "DCH";
|
|
||||||
else if (Debug.isFake)
|
|
||||||
textblockLocalType.Text = "DCH (Debug)";
|
|
||||||
else
|
|
||||||
textblockLocalType.Text = "Standard";
|
|
||||||
|
|
||||||
Debug.LogToFile("INFO Done detecting driver type: " + textblockLocalType.Text);
|
|
||||||
|
|
||||||
// Check for startup shortcut
|
|
||||||
if (File.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup), "EnvyUpdate.lnk")))
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Autostart is enabled.");
|
|
||||||
chkAutostart.IsChecked = true;
|
|
||||||
chkAutostart_Click(null, null); //Automatically recreate shortcut to account for moved EXE.
|
|
||||||
}
|
|
||||||
|
|
||||||
//Check if launched as miminized with arg
|
//Check if launched as miminized with arg
|
||||||
if (arguments.Contains("/minimize"))
|
if (arguments.Contains("/minimize"))
|
||||||
{
|
{
|
||||||
Debug.LogToFile("INFO Launching minimized.");
|
Debug.LogToFile("INFO Launching minimized.");
|
||||||
WindowState = WindowState.Minimized;
|
WindowState = WindowState.Minimized;
|
||||||
Hide();
|
GlobalVars.startMinimized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
DispatcherTimer Dt = new DispatcherTimer();
|
//Check for old unfinished downloads
|
||||||
Dt.Tick += new EventHandler(Dt_Tick);
|
string[] leftovers = Directory.GetFiles(GlobalVars.directoryOfExe, "*-nvidia-installer.exe.downloading");
|
||||||
// Check for new updates every 5 hours.
|
if (leftovers.Length > 0)
|
||||||
Dt.Interval = new TimeSpan(5, 0, 0);
|
|
||||||
Dt.Start();
|
|
||||||
Debug.LogToFile("INFO Started check timer.");
|
|
||||||
|
|
||||||
string watchDirPath = Path.Combine(Environment.ExpandEnvironmentVariables("%ProgramW6432%"), "NVIDIA Corporation\\Installer2\\InstallerCore");
|
|
||||||
if (Directory.Exists(watchDirPath))
|
|
||||||
{
|
{
|
||||||
GlobalVars.monitoringInstall = true;
|
foreach (string leftover in leftovers)
|
||||||
|
|
||||||
var driverFileChangedWatcher = new FileSystemWatcher(watchDirPath);
|
|
||||||
driverFileChangedWatcher.NotifyFilter = NotifyFilters.Attributes
|
|
||||||
| NotifyFilters.CreationTime
|
|
||||||
| NotifyFilters.FileName
|
|
||||||
| NotifyFilters.LastAccess
|
|
||||||
| NotifyFilters.LastWrite
|
|
||||||
| NotifyFilters.Size;
|
|
||||||
driverFileChangedWatcher.Changed += DriverFileChanged;
|
|
||||||
|
|
||||||
driverFileChangedWatcher.Filter = "*.dll";
|
|
||||||
driverFileChangedWatcher.IncludeSubdirectories = false;
|
|
||||||
driverFileChangedWatcher.EnableRaisingEvents = true;
|
|
||||||
Debug.LogToFile("INFO Started update file system watcher.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Load();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Dt_Tick(object sender, EventArgs e)
|
|
||||||
{
|
{
|
||||||
Load();
|
Debug.LogToFile("INFO Deleting leftover download " + leftover);
|
||||||
}
|
File.Delete(leftover);
|
||||||
|
|
||||||
private void buttonHelp_Click(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Showing info window.");
|
|
||||||
InfoWindow infoWin = new InfoWindow();
|
|
||||||
infoWin.ShowDialog();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Load()
|
|
||||||
{
|
|
||||||
if (Util.GetDTID() == 18)
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Found studio driver.");
|
|
||||||
radioSD.IsChecked = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Found standard driver.");
|
|
||||||
radioGRD.IsChecked = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (File.Exists(GlobalVars.exedirectory + "skip.envy"))
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Found version skip config.");
|
|
||||||
skippedVer = File.ReadLines(GlobalVars.exedirectory + "skip.envy").First();
|
|
||||||
}
|
|
||||||
|
|
||||||
// This little bool check is necessary for debug mode on systems without an Nvidia GPU.
|
|
||||||
if (Debug.isFake)
|
|
||||||
{
|
|
||||||
localDriv = Debug.LocalDriv();
|
|
||||||
textblockGPU.Text = localDriv;
|
|
||||||
textblockGPUName.Text = Debug.GPUname();
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Trying to get GPU update URL.");
|
|
||||||
gpuURL = Util.GetGpuUrl();
|
|
||||||
}
|
|
||||||
catch (ArgumentException)
|
|
||||||
{
|
|
||||||
Debug.LogToFile("WARN Could not get GPU update URL, trying again with non-studio driver.");
|
|
||||||
try
|
|
||||||
{
|
|
||||||
// disable SD and try with GRD
|
|
||||||
if (File.Exists(GlobalVars.exedirectory + "sd.envy"))
|
|
||||||
{
|
|
||||||
File.Delete(GlobalVars.exedirectory + "sd.envy");
|
|
||||||
}
|
|
||||||
|
|
||||||
gpuURL = Util.GetGpuUrl(); //try again with GRD
|
|
||||||
MessageBox.Show(Properties.Resources.ui_studionotsupported);
|
|
||||||
radioGRD.IsChecked = true;
|
|
||||||
}
|
|
||||||
catch (ArgumentNullException)
|
|
||||||
{
|
|
||||||
MessageBox.Show("ERROR: Could not get list of GPU models from Nvidia, please check your network connection.\nOtherwise, please report this issue on GitHub.");
|
|
||||||
Environment.Exit(11);
|
|
||||||
}
|
|
||||||
catch (ArgumentException e)
|
|
||||||
{
|
|
||||||
// Now we have a problem.
|
|
||||||
Debug.LogToFile("FATAL Invalid API response from Nvidia. Attempted API call: " + e.Message);
|
|
||||||
MessageBox.Show("ERROR: Invalid API response from Nvidia. Please file an issue on GitHub.\nAttempted API call:\n" + e.Message);
|
|
||||||
Environment.Exit(10);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
using (var c = new WebClient())
|
GlobalVars.isMobile = Util.IsMobile();
|
||||||
{
|
Debug.LogToFile("INFO Mobile: " + GlobalVars.isMobile);
|
||||||
Debug.LogToFile("INFO Trying to get newest driver version.");
|
|
||||||
string pContent = c.DownloadString(gpuURL);
|
|
||||||
var pattern = @"Windows\/\d{3}\.\d{2}";
|
|
||||||
Regex rgx = new Regex(pattern);
|
|
||||||
var matches = rgx.Matches(pContent);
|
|
||||||
onlineDriv = Regex.Replace(Convert.ToString(matches[0]), "Windows/", "");
|
|
||||||
textblockOnline.Text = onlineDriv;
|
|
||||||
Debug.LogToFile("INFO Got online driver version: " + onlineDriv);
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
if (File.Exists(Path.Combine(GlobalVars.saveDirectory, "autodl.envy")))
|
||||||
{
|
{
|
||||||
if (float.Parse(localDriv) < float.Parse(onlineDriv))
|
Debug.LogToFile("INFO Auto-download is enabled.");
|
||||||
{
|
GlobalVars.autoDownload = true;
|
||||||
Debug.LogToFile("INFO Local version is older than online. Setting UI...");
|
|
||||||
textblockOnline.Foreground = Brushes.Red;
|
|
||||||
buttonDL.IsEnabled = true;
|
|
||||||
if (skippedVer == null)
|
|
||||||
{
|
|
||||||
buttonSkip.Content = Properties.Resources.ui_skipversion;
|
|
||||||
buttonSkip.IsEnabled = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
buttonSkip.Content = Properties.Resources.ui_skipped;
|
|
||||||
|
|
||||||
Debug.LogToFile("INFO UI set.");
|
|
||||||
|
|
||||||
if (skippedVer != onlineDriv)
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Showing update popup notification.");
|
|
||||||
Notify.ShowDrivUpdatePopup();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Local version is up to date.");
|
|
||||||
buttonSkip.IsEnabled = false;
|
|
||||||
textblockOnline.Foreground = Brushes.Green;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (FormatException)
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Caught FormatException, assuming locale workaround is necessary.");
|
|
||||||
//Thank you locales. Some languages need , instead of . for proper parsing
|
|
||||||
string cLocalDriv = localDriv.Replace('.', ',');
|
|
||||||
string cOnlineDriv = onlineDriv.Replace('.', ',');
|
|
||||||
if (float.Parse(cLocalDriv) < float.Parse(cOnlineDriv))
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Local version is older than online. Setting UI...");
|
|
||||||
textblockOnline.Foreground = Brushes.Red;
|
|
||||||
buttonDL.IsEnabled = true;
|
|
||||||
if (skippedVer == null)
|
|
||||||
buttonSkip.IsEnabled = true;
|
|
||||||
else
|
|
||||||
buttonSkip.Content = Properties.Resources.ui_skipped;
|
|
||||||
if (skippedVer != onlineDriv)
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Showing update popup notification.");
|
|
||||||
Notify.ShowDrivUpdatePopup();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Local version is up to date.");
|
|
||||||
buttonSkip.IsEnabled = false;
|
|
||||||
textblockOnline.Foreground = Brushes.Green;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//Check for different version than skipped version
|
|
||||||
if (skippedVer != null && skippedVer != onlineDriv)
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Skipped version is surpassed, deleting setting.");
|
|
||||||
skippedVer = null;
|
|
||||||
if (File.Exists(GlobalVars.exedirectory + "skip.envy"))
|
|
||||||
File.Delete(GlobalVars.exedirectory + "skip.envy");
|
|
||||||
buttonSkip.Content = Properties.Resources.ui_skipversion;
|
|
||||||
buttonSkip.IsEnabled = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void buttonDL_Click(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Opening download page.");
|
|
||||||
Process.Start(gpuURL);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void TaskbarIcon_TrayLeftMouseDown(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Tray was clicked, opening main window.");
|
|
||||||
Util.ShowMain();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Window_StateChanged(object sender, EventArgs e)
|
private void Window_StateChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (WindowState == WindowState.Minimized)
|
if (WindowState == WindowState.Minimized)
|
||||||
|
@ -324,115 +131,24 @@ namespace EnvyUpdate
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UninstallAll()
|
|
||||||
{
|
|
||||||
if (File.Exists(GlobalVars.startup + "\\EnvyUpdate.lnk"))
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Deleted startup entry.");
|
|
||||||
File.Delete(GlobalVars.startup + "\\EnvyUpdate.lnk");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (File.Exists(GlobalVars.startmenu + "\\EnvyUpdate.lnk"))
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Deleted start menu entry.");
|
|
||||||
File.Delete(GlobalVars.startmenu + "\\EnvyUpdate.lnk");
|
|
||||||
}
|
|
||||||
if ((GlobalVars.exedirectory == GlobalVars.appdata) && File.Exists(GlobalVars.appdata + "EnvyUpdate.exe"))
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Deleting EnvyUpdate appdata and self.");
|
|
||||||
MessageBox.Show(Properties.Resources.uninstall_legacy_message);
|
|
||||||
Util.SelfDelete();
|
|
||||||
}
|
|
||||||
else if (Directory.Exists(GlobalVars.appdata))
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Deleting EnvyUpdate appdata folder");
|
|
||||||
Directory.Delete(GlobalVars.appdata, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
||||||
{
|
|
||||||
if (MessageBox.Show(Properties.Resources.exit_confirm, "", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
|
|
||||||
{
|
{
|
||||||
Debug.LogToFile("INFO Uninstalling notifications and shutting down.");
|
Debug.LogToFile("INFO Uninstalling notifications and shutting down.");
|
||||||
ToastNotificationManagerCompat.Uninstall(); // Uninstall notifications to prevent issues with the app being portable.
|
ToastNotificationManagerCompat.Uninstall(); // Uninstall notifications to prevent issues with the app being portable.
|
||||||
Application.Current.Shutdown();
|
Application.Current.Shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void AdjustTheme(object sender = null, UserPreferenceChangedEventArgs e = null)
|
||||||
|
{
|
||||||
|
if (Util.IsDarkTheme())
|
||||||
|
Wpf.Ui.Appearance.Theme.Apply(Wpf.Ui.Appearance.ThemeType.Dark, Wpf.Ui.Appearance.BackgroundType.Mica);
|
||||||
else
|
else
|
||||||
{
|
Wpf.Ui.Appearance.Theme.Apply(Wpf.Ui.Appearance.ThemeType.Light, Wpf.Ui.Appearance.BackgroundType.Mica);
|
||||||
Debug.LogToFile("INFO Application shutdown was cancelled.");
|
|
||||||
e.Cancel = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void radioGRD_Checked(object sender, RoutedEventArgs e)
|
private void NotifyIcon_LeftClick(Wpf.Ui.Controls.NotifyIcon sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
if (File.Exists(GlobalVars.exedirectory + "sd.envy"))
|
Util.ShowMain();
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Switching to game ready driver.");
|
|
||||||
File.Delete(GlobalVars.exedirectory + "sd.envy");
|
|
||||||
Load();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void radioSD_Checked(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
if (!File.Exists(GlobalVars.exedirectory + "sd.envy"))
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Switching to studio driver.");
|
|
||||||
File.Create(GlobalVars.exedirectory + "sd.envy").Close();
|
|
||||||
Load();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void chkAutostart_Click(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
if (File.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup), "EnvyUpdate.lnk")))
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Removing autostart entry.");
|
|
||||||
File.Delete(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup), "EnvyUpdate.lnk"));
|
|
||||||
}
|
|
||||||
if (chkAutostart.IsChecked == true)
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Creating autostart entry.");
|
|
||||||
Util.CreateShortcut("EnvyUpdate", Environment.GetFolderPath(Environment.SpecialFolder.Startup), GlobalVars.exeloc, "NVidia Update Checker", "/minimize");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void buttonSkip_Click(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Skipping version.");
|
|
||||||
skippedVer = onlineDriv;
|
|
||||||
File.WriteAllText(GlobalVars.exedirectory + "skip.envy", onlineDriv);
|
|
||||||
buttonSkip.IsEnabled = false;
|
|
||||||
buttonSkip.Content = Properties.Resources.ui_skipped;
|
|
||||||
MessageBox.Show(Properties.Resources.skip_confirm);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void UpdateLocalVer(bool reloadLocalDriv = true)
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Updating local driver version in UI.");
|
|
||||||
if (reloadLocalDriv)
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Reloading local driver version.");
|
|
||||||
localDriv = Util.GetLocDriv();
|
|
||||||
}
|
|
||||||
textblockGPU.Text = localDriv;
|
|
||||||
if (GlobalVars.isMobile)
|
|
||||||
textblockGPUName.Text = Util.GetGPUName(false) + " (mobile)";
|
|
||||||
else
|
|
||||||
textblockGPUName.Text = Util.GetGPUName(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void DriverFileChanged(object sender, FileSystemEventArgs e)
|
|
||||||
{
|
|
||||||
Debug.LogToFile("INFO Watched driver file changed! Reloading data.");
|
|
||||||
System.Threading.Thread.Sleep(10000);
|
|
||||||
Application.Current.Dispatcher.Invoke(delegate
|
|
||||||
{
|
|
||||||
UpdateLocalVer();
|
|
||||||
Load();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -5,13 +5,17 @@ namespace EnvyUpdate
|
||||||
internal class Notify
|
internal class Notify
|
||||||
{
|
{
|
||||||
public static void ShowDrivUpdatePopup()
|
public static void ShowDrivUpdatePopup()
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
var toast = new ToastContentBuilder();
|
var toast = new ToastContentBuilder();
|
||||||
toast.AddText(Properties.Resources.update_popup_message);
|
toast.AddText(Properties.Resources.update_popup_message);
|
||||||
toast.AddButton(new ToastButton()
|
|
||||||
.SetContent("Download")
|
|
||||||
.AddArgument("action", "download"));
|
|
||||||
toast.Show();
|
toast.Show();
|
||||||
}
|
}
|
||||||
|
catch (System.Exception ex)
|
||||||
|
{
|
||||||
|
Debug.LogToFile("WARN Could not show notification. Error: " + ex.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -49,5 +49,5 @@ using System.Windows;
|
||||||
// You can specify all the values or you can default the Build and Revision Numbers
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
// by using the '*' as shown below:
|
// by using the '*' as shown below:
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("2.20")]
|
[assembly: AssemblyVersion("3.6")]
|
||||||
[assembly: AssemblyFileVersion("2.20")]
|
[assembly: AssemblyFileVersion("3.6")]
|
||||||
|
|
166
EnvyUpdate/Properties/Licenses.Designer.cs
generated
Normal file
166
EnvyUpdate/Properties/Licenses.Designer.cs
generated
Normal file
|
@ -0,0 +1,166 @@
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace EnvyUpdate.Properties {
|
||||||
|
using System;
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||||
|
/// </summary>
|
||||||
|
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||||
|
// class via a tool like ResGen or Visual Studio.
|
||||||
|
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||||
|
// with the /str option, or rebuild your VS project.
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
internal class Licenses {
|
||||||
|
|
||||||
|
private static global::System.Resources.ResourceManager resourceMan;
|
||||||
|
|
||||||
|
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||||
|
|
||||||
|
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||||
|
internal Licenses() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the cached ResourceManager instance used by this class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||||
|
get {
|
||||||
|
if (object.ReferenceEquals(resourceMan, null)) {
|
||||||
|
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("EnvyUpdate.Properties.Licenses", typeof(Licenses).Assembly);
|
||||||
|
resourceMan = temp;
|
||||||
|
}
|
||||||
|
return resourceMan;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Overrides the current thread's CurrentUICulture property for all
|
||||||
|
/// resource lookups using this strongly typed resource class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Globalization.CultureInfo Culture {
|
||||||
|
get {
|
||||||
|
return resourceCulture;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
resourceCulture = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to GNU LGPL information
|
||||||
|
/// --------------------
|
||||||
|
///This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
|
||||||
|
///
|
||||||
|
///This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public [rest of string was truncated]";.
|
||||||
|
/// </summary>
|
||||||
|
internal static string _7zip {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("7zip", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to The MIT License
|
||||||
|
///
|
||||||
|
///Copyright (c) 2012 Simon Cropp and contributors
|
||||||
|
///
|
||||||
|
///Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
///
|
||||||
|
///The ab [rest of string was truncated]";.
|
||||||
|
/// </summary>
|
||||||
|
internal static string CosturaFody {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("CosturaFody", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to MIT License
|
||||||
|
///
|
||||||
|
///Copyright (c) 2019-2023 Jakob Senkl
|
||||||
|
///
|
||||||
|
///Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
///
|
||||||
|
///The above copyright no [rest of string was truncated]";.
|
||||||
|
/// </summary>
|
||||||
|
internal static string EnvyUpdate {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("EnvyUpdate", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to MIT License
|
||||||
|
///
|
||||||
|
///Copyright (c) Simon Cropp
|
||||||
|
///
|
||||||
|
///Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
///
|
||||||
|
///The above copyright notice and t [rest of string was truncated]";.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Fody {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Fody", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to The MIT License (MIT)
|
||||||
|
///
|
||||||
|
///Copyright (c) MarcStan
|
||||||
|
///
|
||||||
|
///Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
///
|
||||||
|
///The above copyright notic [rest of string was truncated]";.
|
||||||
|
/// </summary>
|
||||||
|
internal static string ResourceEmbedder {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ResourceEmbedder", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to # Windows Community Toolkit
|
||||||
|
///
|
||||||
|
///Copyright © .NET Foundation and Contributors
|
||||||
|
///
|
||||||
|
///All rights reserved.
|
||||||
|
///
|
||||||
|
///## MIT License (MIT)
|
||||||
|
///
|
||||||
|
///Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished [rest of string was truncated]";.
|
||||||
|
/// </summary>
|
||||||
|
internal static string WindowsCommunityToolkit {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("WindowsCommunityToolkit", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to MIT License
|
||||||
|
///
|
||||||
|
///Copyright (c) 2021-2023 Leszek Pomianowski and WPF UI Contributors. https://dev.lepo.co/
|
||||||
|
///
|
||||||
|
///Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject t [rest of string was truncated]";.
|
||||||
|
/// </summary>
|
||||||
|
internal static string wpfui {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("wpfui", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
199
EnvyUpdate/Properties/Licenses.resx
Normal file
199
EnvyUpdate/Properties/Licenses.resx
Normal file
|
@ -0,0 +1,199 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="7zip" xml:space="preserve">
|
||||||
|
<value>GNU LGPL information
|
||||||
|
--------------------
|
||||||
|
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You can receive a copy of the GNU Lesser General Public License from http://www.gnu.org/</value>
|
||||||
|
</data>
|
||||||
|
<data name="CosturaFody" xml:space="preserve">
|
||||||
|
<value>The MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2012 Simon Cropp and contributors
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</value>
|
||||||
|
</data>
|
||||||
|
<data name="EnvyUpdate" xml:space="preserve">
|
||||||
|
<value>MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2019-2023 Jakob Senkl
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Fody" xml:space="preserve">
|
||||||
|
<value>MIT License
|
||||||
|
|
||||||
|
Copyright (c) Simon Cropp
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ResourceEmbedder" xml:space="preserve">
|
||||||
|
<value>The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) MarcStan
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</value>
|
||||||
|
</data>
|
||||||
|
<data name="WindowsCommunityToolkit" xml:space="preserve">
|
||||||
|
<value># Windows Community Toolkit
|
||||||
|
|
||||||
|
Copyright © .NET Foundation and Contributors
|
||||||
|
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
## MIT License (MIT)
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</value>
|
||||||
|
</data>
|
||||||
|
<data name="wpfui" xml:space="preserve">
|
||||||
|
<value>MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2021-2023 Leszek Pomianowski and WPF UI Contributors. https://dev.lepo.co/
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
252
EnvyUpdate/Properties/Resources.Designer.cs
generated
252
EnvyUpdate/Properties/Resources.Designer.cs
generated
|
@ -69,6 +69,15 @@ namespace EnvyUpdate.Properties {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to An error occurred attempting to install the new version. Please enable logging in the settings and report the issue on GitHub!.
|
||||||
|
/// </summary>
|
||||||
|
public static string error_installing {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("error_installing", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Exit EnvyUpdate?.
|
/// Looks up a localized string similar to Exit EnvyUpdate?.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -78,6 +87,114 @@ namespace EnvyUpdate.Properties {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to There was a problem downloading the driver installer. Please try again..
|
||||||
|
/// </summary>
|
||||||
|
public static string info_download_error {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("info_download_error", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Error while downloading.
|
||||||
|
/// </summary>
|
||||||
|
public static string info_download_error_title {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("info_download_error_title", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to A download process is already running!.
|
||||||
|
/// </summary>
|
||||||
|
public static string info_download_running {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("info_download_running", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Download running.
|
||||||
|
/// </summary>
|
||||||
|
public static string info_download_running_title {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("info_download_running_title", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Driver installer successfully downloaded..
|
||||||
|
/// </summary>
|
||||||
|
public static string info_download_success {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("info_download_success", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Download successful.
|
||||||
|
/// </summary>
|
||||||
|
public static string info_download_success_title {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("info_download_success_title", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to The driver files have finished extracting..
|
||||||
|
/// </summary>
|
||||||
|
public static string info_extract_complete {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("info_extract_complete", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Extraction complete.
|
||||||
|
/// </summary>
|
||||||
|
public static string info_extract_complete_title {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("info_extract_complete_title", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to The driver files are being extracted. This could take a few minutes..
|
||||||
|
/// </summary>
|
||||||
|
public static string info_extracting {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("info_extracting", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Extracting driver files.
|
||||||
|
/// </summary>
|
||||||
|
public static string info_extracting_title {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("info_extracting_title", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to The installation of the new driver version was completed..
|
||||||
|
/// </summary>
|
||||||
|
public static string info_install_complete {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("info_install_complete", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Update finished.
|
||||||
|
/// </summary>
|
||||||
|
public static string info_install_complete_title {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("info_install_complete_title", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Preference reset..
|
/// Looks up a localized string similar to Preference reset..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -114,6 +231,15 @@ namespace EnvyUpdate.Properties {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to No.
|
||||||
|
/// </summary>
|
||||||
|
public static string no {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("no", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to No NVIDIA GPU found. Application will exit..
|
/// Looks up a localized string similar to No NVIDIA GPU found. Application will exit..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -141,6 +267,51 @@ namespace EnvyUpdate.Properties {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Download.
|
||||||
|
/// </summary>
|
||||||
|
public static string ui_download {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ui_download", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Save files to AppData.
|
||||||
|
/// </summary>
|
||||||
|
public static string ui_enable_appdata {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ui_enable_appdata", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Download updates automatically.
|
||||||
|
/// </summary>
|
||||||
|
public static string ui_enable_autodownload {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ui_enable_autodownload", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Enable logging to file.
|
||||||
|
/// </summary>
|
||||||
|
public static string ui_enable_logging {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ui_enable_logging", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Home.
|
||||||
|
/// </summary>
|
||||||
|
public static string ui_home {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ui_home", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to DCH driver.
|
/// Looks up a localized string similar to DCH driver.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -159,6 +330,24 @@ namespace EnvyUpdate.Properties {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Update available..
|
||||||
|
/// </summary>
|
||||||
|
public static string ui_info_outdated {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ui_info_outdated", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Up to date..
|
||||||
|
/// </summary>
|
||||||
|
public static string ui_info_uptodate {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ui_info_uptodate", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to EnvyUpdate website.
|
/// Looks up a localized string similar to EnvyUpdate website.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -177,6 +366,15 @@ namespace EnvyUpdate.Properties {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Licenses.
|
||||||
|
/// </summary>
|
||||||
|
public static string ui_licenses {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ui_licenses", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Local driver version:.
|
/// Looks up a localized string similar to Local driver version:.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -195,6 +393,24 @@ namespace EnvyUpdate.Properties {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to All good..
|
||||||
|
/// </summary>
|
||||||
|
public static string ui_message_good {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ui_message_good", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to New driver found..
|
||||||
|
/// </summary>
|
||||||
|
public static string ui_message_update {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ui_message_update", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Online driver version:.
|
/// Looks up a localized string similar to Online driver version:.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -204,6 +420,24 @@ namespace EnvyUpdate.Properties {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Open website.
|
||||||
|
/// </summary>
|
||||||
|
public static string ui_openwebsite {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ui_openwebsite", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Settings.
|
||||||
|
/// </summary>
|
||||||
|
public static string ui_settings {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ui_settings", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Version skipped.
|
/// Looks up a localized string similar to Version skipped.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -258,6 +492,15 @@ namespace EnvyUpdate.Properties {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Your operating system is not supported by EnvyUpdate. Windows 10 or later is required..
|
||||||
|
/// </summary>
|
||||||
|
public static string unsupported_os {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("unsupported_os", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to A new driver update is available for your graphics card..
|
/// Looks up a localized string similar to A new driver update is available for your graphics card..
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -266,5 +509,14 @@ namespace EnvyUpdate.Properties {
|
||||||
return ResourceManager.GetString("update_popup_message", resourceCulture);
|
return ResourceManager.GetString("update_popup_message", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Yes.
|
||||||
|
/// </summary>
|
||||||
|
public static string yes {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("yes", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -120,9 +120,48 @@
|
||||||
<data name="app_description" xml:space="preserve">
|
<data name="app_description" xml:space="preserve">
|
||||||
<value>NVIDIA Aktualisierungsanwendung.</value>
|
<value>NVIDIA Aktualisierungsanwendung.</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="error_installing" xml:space="preserve">
|
||||||
|
<value>Ein Fehler ist bei der Installation aufgetreten. Bitte aktivieren Sie den Log und melden Sie den Fehler auf GitHub!</value>
|
||||||
|
</data>
|
||||||
<data name="exit_confirm" xml:space="preserve">
|
<data name="exit_confirm" xml:space="preserve">
|
||||||
<value>EnvyUpdate schließen?</value>
|
<value>EnvyUpdate schließen?</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="info_download_error" xml:space="preserve">
|
||||||
|
<value>Fehler beim Herunterladen der Treiber-Installationsdatei. Bitte versuchen Sie es erneut.</value>
|
||||||
|
</data>
|
||||||
|
<data name="info_download_error_title" xml:space="preserve">
|
||||||
|
<value>Fehler beim Herunterladen</value>
|
||||||
|
</data>
|
||||||
|
<data name="info_download_running" xml:space="preserve">
|
||||||
|
<value>Ein Downloadvorgang läuft bereits!</value>
|
||||||
|
</data>
|
||||||
|
<data name="info_download_running_title" xml:space="preserve">
|
||||||
|
<value>Download läuft</value>
|
||||||
|
</data>
|
||||||
|
<data name="info_download_success" xml:space="preserve">
|
||||||
|
<value>Treiber-Installationsdatei erfolgreich heruntergeladen.</value>
|
||||||
|
</data>
|
||||||
|
<data name="info_download_success_title" xml:space="preserve">
|
||||||
|
<value>Herunterladen erfolgreich abgeschlossen</value>
|
||||||
|
</data>
|
||||||
|
<data name="info_extracting" xml:space="preserve">
|
||||||
|
<value>Die Treiberdateien werden nun extrahiert. Dies könnte einige Minuten dauern.</value>
|
||||||
|
</data>
|
||||||
|
<data name="info_extracting_title" xml:space="preserve">
|
||||||
|
<value>Dateien werden extrahiert</value>
|
||||||
|
</data>
|
||||||
|
<data name="info_extract_complete" xml:space="preserve">
|
||||||
|
<value>Die Treiberdateien wurden vollständig extrahiert.</value>
|
||||||
|
</data>
|
||||||
|
<data name="info_extract_complete_title" xml:space="preserve">
|
||||||
|
<value>Extrahierung abgeschlossen</value>
|
||||||
|
</data>
|
||||||
|
<data name="info_install_complete" xml:space="preserve">
|
||||||
|
<value>Die Installation der neuen Treiberversion wurde abgeschlossen.</value>
|
||||||
|
</data>
|
||||||
|
<data name="info_install_complete_title" xml:space="preserve">
|
||||||
|
<value>Update abgeschlossen</value>
|
||||||
|
</data>
|
||||||
<data name="info_reset_caption" xml:space="preserve">
|
<data name="info_reset_caption" xml:space="preserve">
|
||||||
<value>Einstellung zurückgesetzt.</value>
|
<value>Einstellung zurückgesetzt.</value>
|
||||||
</data>
|
</data>
|
||||||
|
@ -135,6 +174,9 @@
|
||||||
<data name="message_new_version" xml:space="preserve">
|
<data name="message_new_version" xml:space="preserve">
|
||||||
<value>Neue Version von EnvyUpdate gefunden. Die Anwendung wird neu starten.\nDies wird wahrscheinlich einige Sekunden dauern.</value>
|
<value>Neue Version von EnvyUpdate gefunden. Die Anwendung wird neu starten.\nDies wird wahrscheinlich einige Sekunden dauern.</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="no" xml:space="preserve">
|
||||||
|
<value>Nein</value>
|
||||||
|
</data>
|
||||||
<data name="no_compatible_gpu" xml:space="preserve">
|
<data name="no_compatible_gpu" xml:space="preserve">
|
||||||
<value>Keine NVIDIA GPU gefunden. EnvyUpdate wird sich nun schließen.</value>
|
<value>Keine NVIDIA GPU gefunden. EnvyUpdate wird sich nun schließen.</value>
|
||||||
</data>
|
</data>
|
||||||
|
@ -144,27 +186,63 @@
|
||||||
<data name="ui_autostart" xml:space="preserve">
|
<data name="ui_autostart" xml:space="preserve">
|
||||||
<value>Beim Start von Windows ausführen</value>
|
<value>Beim Start von Windows ausführen</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="ui_download" xml:space="preserve">
|
||||||
|
<value>Herunterladen</value>
|
||||||
|
</data>
|
||||||
|
<data name="ui_enable_appdata" xml:space="preserve">
|
||||||
|
<value>Programmdaten in AppData speichern</value>
|
||||||
|
</data>
|
||||||
|
<data name="ui_enable_autodownload" xml:space="preserve">
|
||||||
|
<value>Updates automatisch herunterladen</value>
|
||||||
|
</data>
|
||||||
|
<data name="ui_enable_logging" xml:space="preserve">
|
||||||
|
<value>Programm-Log in Datei schreiben</value>
|
||||||
|
</data>
|
||||||
|
<data name="ui_home" xml:space="preserve">
|
||||||
|
<value>Start</value>
|
||||||
|
</data>
|
||||||
<data name="ui_info_dch" xml:space="preserve">
|
<data name="ui_info_dch" xml:space="preserve">
|
||||||
<value>DCH Treiber</value>
|
<value>DCH Treiber</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ui_info_mobile" xml:space="preserve">
|
<data name="ui_info_mobile" xml:space="preserve">
|
||||||
<value>Mobile Grafikkarte (Laptop, etc)?</value>
|
<value>Mobile Grafikkarte (Laptop, etc)?</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="ui_info_outdated" xml:space="preserve">
|
||||||
|
<value>Aktualisierung verfügbar.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ui_info_uptodate" xml:space="preserve">
|
||||||
|
<value>Aktuell.</value>
|
||||||
|
</data>
|
||||||
<data name="ui_info_website" xml:space="preserve">
|
<data name="ui_info_website" xml:space="preserve">
|
||||||
<value>EnvyUpdate Webseite</value>
|
<value>EnvyUpdate Webseite</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ui_install" xml:space="preserve">
|
<data name="ui_install" xml:space="preserve">
|
||||||
<value>Installieren</value>
|
<value>Installieren</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="ui_licenses" xml:space="preserve">
|
||||||
|
<value>Lizenzen</value>
|
||||||
|
</data>
|
||||||
<data name="ui_localdriver" xml:space="preserve">
|
<data name="ui_localdriver" xml:space="preserve">
|
||||||
<value>Lokale Treiberversion:</value>
|
<value>Lokale Treiberversion:</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ui_localdriver_type" xml:space="preserve">
|
<data name="ui_localdriver_type" xml:space="preserve">
|
||||||
<value>Lokaler Treibertyp:</value>
|
<value>Lokaler Treibertyp:</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="ui_message_good" xml:space="preserve">
|
||||||
|
<value>Alles in Ordnung.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ui_message_update" xml:space="preserve">
|
||||||
|
<value>Neue Treiberversion gefunden.</value>
|
||||||
|
</data>
|
||||||
<data name="ui_onlinedriver" xml:space="preserve">
|
<data name="ui_onlinedriver" xml:space="preserve">
|
||||||
<value>Online Treiberversion:</value>
|
<value>Online Treiberversion:</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="ui_openwebsite" xml:space="preserve">
|
||||||
|
<value>Webseite öffnen</value>
|
||||||
|
</data>
|
||||||
|
<data name="ui_settings" xml:space="preserve">
|
||||||
|
<value>Einstellungen</value>
|
||||||
|
</data>
|
||||||
<data name="ui_skipped" xml:space="preserve">
|
<data name="ui_skipped" xml:space="preserve">
|
||||||
<value>Version übersprungen</value>
|
<value>Version übersprungen</value>
|
||||||
</data>
|
</data>
|
||||||
|
@ -183,7 +261,13 @@
|
||||||
<data name="uninstall_legacy_message" xml:space="preserve">
|
<data name="uninstall_legacy_message" xml:space="preserve">
|
||||||
<value>Aufgrund eines Programmfehlers musste EnvyUpdate deinstalliert werden. Bitte laden Sie die neuste Version erneut manuell herunter.</value>
|
<value>Aufgrund eines Programmfehlers musste EnvyUpdate deinstalliert werden. Bitte laden Sie die neuste Version erneut manuell herunter.</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="unsupported_os" xml:space="preserve">
|
||||||
|
<value>Diese Betriebssystemversion wird von EnvyUpdate nicht unterstützt. Windows 10 oder neuer wird vorausgesetzt.</value>
|
||||||
|
</data>
|
||||||
<data name="update_popup_message" xml:space="preserve">
|
<data name="update_popup_message" xml:space="preserve">
|
||||||
<value>Eine neue Treiberversion ist verfügbar.</value>
|
<value>Eine neue Treiberversion ist verfügbar.</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="yes" xml:space="preserve">
|
||||||
|
<value>Ja</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -120,9 +120,48 @@
|
||||||
<data name="app_description" xml:space="preserve">
|
<data name="app_description" xml:space="preserve">
|
||||||
<value>NVIDIA Updater Application.</value>
|
<value>NVIDIA Updater Application.</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="error_installing" xml:space="preserve">
|
||||||
|
<value>An error occurred attempting to install the new version. Please enable logging in the settings and report the issue on GitHub!</value>
|
||||||
|
</data>
|
||||||
<data name="exit_confirm" xml:space="preserve">
|
<data name="exit_confirm" xml:space="preserve">
|
||||||
<value>Exit EnvyUpdate?</value>
|
<value>Exit EnvyUpdate?</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="info_download_error" xml:space="preserve">
|
||||||
|
<value>There was a problem downloading the driver installer. Please try again.</value>
|
||||||
|
</data>
|
||||||
|
<data name="info_download_error_title" xml:space="preserve">
|
||||||
|
<value>Error while downloading</value>
|
||||||
|
</data>
|
||||||
|
<data name="info_download_running" xml:space="preserve">
|
||||||
|
<value>A download process is already running!</value>
|
||||||
|
</data>
|
||||||
|
<data name="info_download_running_title" xml:space="preserve">
|
||||||
|
<value>Download running</value>
|
||||||
|
</data>
|
||||||
|
<data name="info_download_success" xml:space="preserve">
|
||||||
|
<value>Driver installer successfully downloaded.</value>
|
||||||
|
</data>
|
||||||
|
<data name="info_download_success_title" xml:space="preserve">
|
||||||
|
<value>Download successful</value>
|
||||||
|
</data>
|
||||||
|
<data name="info_extracting" xml:space="preserve">
|
||||||
|
<value>The driver files are being extracted. This could take a few minutes.</value>
|
||||||
|
</data>
|
||||||
|
<data name="info_extracting_title" xml:space="preserve">
|
||||||
|
<value>Extracting driver files</value>
|
||||||
|
</data>
|
||||||
|
<data name="info_extract_complete" xml:space="preserve">
|
||||||
|
<value>The driver files have finished extracting.</value>
|
||||||
|
</data>
|
||||||
|
<data name="info_extract_complete_title" xml:space="preserve">
|
||||||
|
<value>Extraction complete</value>
|
||||||
|
</data>
|
||||||
|
<data name="info_install_complete" xml:space="preserve">
|
||||||
|
<value>The installation of the new driver version was completed.</value>
|
||||||
|
</data>
|
||||||
|
<data name="info_install_complete_title" xml:space="preserve">
|
||||||
|
<value>Update finished</value>
|
||||||
|
</data>
|
||||||
<data name="info_reset_caption" xml:space="preserve">
|
<data name="info_reset_caption" xml:space="preserve">
|
||||||
<value>Preference reset.</value>
|
<value>Preference reset.</value>
|
||||||
</data>
|
</data>
|
||||||
|
@ -135,6 +174,9 @@
|
||||||
<data name="message_new_version" xml:space="preserve">
|
<data name="message_new_version" xml:space="preserve">
|
||||||
<value>New version of EnvyUpdate found. Application will restart.\nThis will probably take a few seconds.</value>
|
<value>New version of EnvyUpdate found. Application will restart.\nThis will probably take a few seconds.</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="no" xml:space="preserve">
|
||||||
|
<value>No</value>
|
||||||
|
</data>
|
||||||
<data name="no_compatible_gpu" xml:space="preserve">
|
<data name="no_compatible_gpu" xml:space="preserve">
|
||||||
<value>No NVIDIA GPU found. Application will exit.</value>
|
<value>No NVIDIA GPU found. Application will exit.</value>
|
||||||
</data>
|
</data>
|
||||||
|
@ -144,27 +186,63 @@
|
||||||
<data name="ui_autostart" xml:space="preserve">
|
<data name="ui_autostart" xml:space="preserve">
|
||||||
<value>Run at Windows startup</value>
|
<value>Run at Windows startup</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="ui_download" xml:space="preserve">
|
||||||
|
<value>Download</value>
|
||||||
|
</data>
|
||||||
|
<data name="ui_enable_appdata" xml:space="preserve">
|
||||||
|
<value>Save files to AppData</value>
|
||||||
|
</data>
|
||||||
|
<data name="ui_enable_autodownload" xml:space="preserve">
|
||||||
|
<value>Download updates automatically</value>
|
||||||
|
</data>
|
||||||
|
<data name="ui_enable_logging" xml:space="preserve">
|
||||||
|
<value>Enable logging to file</value>
|
||||||
|
</data>
|
||||||
|
<data name="ui_home" xml:space="preserve">
|
||||||
|
<value>Home</value>
|
||||||
|
</data>
|
||||||
<data name="ui_info_dch" xml:space="preserve">
|
<data name="ui_info_dch" xml:space="preserve">
|
||||||
<value>DCH driver</value>
|
<value>DCH driver</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ui_info_mobile" xml:space="preserve">
|
<data name="ui_info_mobile" xml:space="preserve">
|
||||||
<value>Mobile GPU (Laptop, etc)?</value>
|
<value>Mobile GPU (Laptop, etc)?</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="ui_info_outdated" xml:space="preserve">
|
||||||
|
<value>Update available.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ui_info_uptodate" xml:space="preserve">
|
||||||
|
<value>Up to date.</value>
|
||||||
|
</data>
|
||||||
<data name="ui_info_website" xml:space="preserve">
|
<data name="ui_info_website" xml:space="preserve">
|
||||||
<value>EnvyUpdate website</value>
|
<value>EnvyUpdate website</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ui_install" xml:space="preserve">
|
<data name="ui_install" xml:space="preserve">
|
||||||
<value>Install</value>
|
<value>Install</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="ui_licenses" xml:space="preserve">
|
||||||
|
<value>Licenses</value>
|
||||||
|
</data>
|
||||||
<data name="ui_localdriver" xml:space="preserve">
|
<data name="ui_localdriver" xml:space="preserve">
|
||||||
<value>Local driver version:</value>
|
<value>Local driver version:</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ui_localdriver_type" xml:space="preserve">
|
<data name="ui_localdriver_type" xml:space="preserve">
|
||||||
<value>Local driver type:</value>
|
<value>Local driver type:</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="ui_message_good" xml:space="preserve">
|
||||||
|
<value>All good.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ui_message_update" xml:space="preserve">
|
||||||
|
<value>New driver found.</value>
|
||||||
|
</data>
|
||||||
<data name="ui_onlinedriver" xml:space="preserve">
|
<data name="ui_onlinedriver" xml:space="preserve">
|
||||||
<value>Online driver version:</value>
|
<value>Online driver version:</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="ui_openwebsite" xml:space="preserve">
|
||||||
|
<value>Open website</value>
|
||||||
|
</data>
|
||||||
|
<data name="ui_settings" xml:space="preserve">
|
||||||
|
<value>Settings</value>
|
||||||
|
</data>
|
||||||
<data name="ui_skipped" xml:space="preserve">
|
<data name="ui_skipped" xml:space="preserve">
|
||||||
<value>Version skipped</value>
|
<value>Version skipped</value>
|
||||||
</data>
|
</data>
|
||||||
|
@ -183,7 +261,13 @@
|
||||||
<data name="uninstall_legacy_message" xml:space="preserve">
|
<data name="uninstall_legacy_message" xml:space="preserve">
|
||||||
<value>EnvyUpdate must be uninstalled because of an application bug. Please download the most recent version again.</value>
|
<value>EnvyUpdate must be uninstalled because of an application bug. Please download the most recent version again.</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="unsupported_os" xml:space="preserve">
|
||||||
|
<value>Your operating system is not supported by EnvyUpdate. Windows 10 or later is required.</value>
|
||||||
|
</data>
|
||||||
<data name="update_popup_message" xml:space="preserve">
|
<data name="update_popup_message" xml:space="preserve">
|
||||||
<value>A new driver update is available for your graphics card.</value>
|
<value>A new driver update is available for your graphics card.</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="yes" xml:space="preserve">
|
||||||
|
<value>Yes</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
79
EnvyUpdate/SettingsPage.xaml
Normal file
79
EnvyUpdate/SettingsPage.xaml
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
<ui:UiPage x:Class="EnvyUpdate.SettingsPage"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:local="clr-namespace:EnvyUpdate"
|
||||||
|
xmlns:p="clr-namespace:EnvyUpdate.Properties"
|
||||||
|
xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
d:DesignHeight="400" d:DesignWidth="600"
|
||||||
|
Title="SettingsPage">
|
||||||
|
|
||||||
|
<Grid Margin="8,0,8,8">
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="Auto"/>
|
||||||
|
<RowDefinition Height="Auto"/>
|
||||||
|
<RowDefinition Height="Auto"/>
|
||||||
|
<RowDefinition Height="Auto"/>
|
||||||
|
<RowDefinition Height="Auto"/>
|
||||||
|
<RowDefinition />
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<Grid Grid.Row="0">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition/>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
<ColumnDefinition/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<ui:SymbolIcon Grid.Column="1" Symbol="WindowApps24" FontSize="32" />
|
||||||
|
<TextBlock Margin="8,0,0,0" Grid.Column="2" x:Name="textBlockVer" Text="" VerticalAlignment="Center" FontSize="24"/>
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
<ui:CardAction Grid.Row="1" Margin="0,12,0,0" Icon="Open24" Content="{x:Static p:Resources.ui_info_website}" Click="CardWeb_Click"/>
|
||||||
|
<ui:CardControl Grid.Row="2" Margin="0,12,0,0" Icon="Bug24" Header="{x:Static p:Resources.ui_enable_logging}" >
|
||||||
|
<ui:ToggleSwitch x:Name="chkLog" Checked="chkLog_Checked" Unchecked="chkLog_Unchecked"/>
|
||||||
|
</ui:CardControl>
|
||||||
|
|
||||||
|
<Grid Grid.Row="3">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="1*"/>
|
||||||
|
<ColumnDefinition Width="5"/>
|
||||||
|
<ColumnDefinition Width="1*"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<ui:CardControl Grid.Column="0" Margin="0,12,0,0" Icon="Folder24" Header="{x:Static p:Resources.ui_enable_appdata}" VerticalAlignment="Top" >
|
||||||
|
<ui:ToggleSwitch x:Name="chkAppdata" Checked="chkAppdata_Checked" Unchecked="chkAppdata_Unchecked"/>
|
||||||
|
</ui:CardControl>
|
||||||
|
<ui:CardControl Grid.Column="2" Margin="0,12,0,0" Icon="ArrowDownload24" Header="{x:Static p:Resources.ui_enable_autodownload}" VerticalAlignment="Top">
|
||||||
|
<ui:ToggleSwitch x:Name="chkAutodl" Checked="chkAutodl_Checked" Unchecked="chkAutodl_Unchecked"/>
|
||||||
|
</ui:CardControl>
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
<Label Grid.Row="4" Content="{x:Static p:Resources.ui_licenses}" HorizontalAlignment="Left" VerticalAlignment="Top" FontWeight="Bold"/>
|
||||||
|
<ScrollViewer Grid.Row="5" MaxHeight="700" HorizontalAlignment="Stretch">
|
||||||
|
<StackPanel>
|
||||||
|
<Expander Header="EnvyUpdate">
|
||||||
|
<TextBox x:Name="textBoxLicEnvyupdate" IsReadOnly="True" TextWrapping="Wrap"/>
|
||||||
|
</Expander>
|
||||||
|
<Expander Margin="0,4,0,0" Header="Fody">
|
||||||
|
<TextBox x:Name="textBoxLicFody" IsReadOnly="True" TextWrapping="Wrap"/>
|
||||||
|
</Expander>
|
||||||
|
<Expander Margin="0,4,0,0" Header="Costura.Fody">
|
||||||
|
<TextBox x:Name="textBoxLicCostura" IsReadOnly="True" TextWrapping="Wrap"/>
|
||||||
|
</Expander>
|
||||||
|
<Expander Margin="0,4,0,0" Header="ResourceEmbedder">
|
||||||
|
<TextBox x:Name="textBoxLicResourceembedder" IsReadOnly="True" TextWrapping="Wrap"/>
|
||||||
|
</Expander>
|
||||||
|
<Expander Margin="0,4,0,0" Header="Windows Community Toolkit">
|
||||||
|
<TextBox x:Name="textBoxLicWindowscommunitytoolkit" IsReadOnly="True" TextWrapping="Wrap"/>
|
||||||
|
</Expander>
|
||||||
|
<Expander Margin="0,4,0,0" Header="WPF-UI">
|
||||||
|
<TextBox x:Name="textBoxLicWpfui" IsReadOnly="True" TextWrapping="Wrap"/>
|
||||||
|
</Expander>
|
||||||
|
<Expander Margin="0,4,0,0" Header="7-Zip">
|
||||||
|
<TextBox x:Name="textBoxLic7zip" IsReadOnly="True" TextWrapping="Wrap"/>
|
||||||
|
</Expander>
|
||||||
|
</StackPanel>
|
||||||
|
</ScrollViewer>
|
||||||
|
</Grid>
|
||||||
|
</ui:UiPage>
|
123
EnvyUpdate/SettingsPage.xaml.cs
Normal file
123
EnvyUpdate/SettingsPage.xaml.cs
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Windows;
|
||||||
|
|
||||||
|
namespace EnvyUpdate
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Interaction logic for SettingsPage.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class SettingsPage
|
||||||
|
{
|
||||||
|
public SettingsPage()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
|
||||||
|
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
|
||||||
|
System.Diagnostics.FileVersionInfo fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location);
|
||||||
|
string version = fvi.FileVersion;
|
||||||
|
|
||||||
|
textBlockVer.Text = version;
|
||||||
|
if (GlobalVars.monitoringInstall)
|
||||||
|
textBlockVer.FontStyle = FontStyles.Italic;
|
||||||
|
|
||||||
|
if (File.Exists(Path.Combine(GlobalVars.saveDirectory, "envyupdate.log")) || File.Exists(Path.Combine(GlobalVars.appdata, "envyupdate.log")))
|
||||||
|
chkLog.IsChecked = true;
|
||||||
|
|
||||||
|
if (GlobalVars.useAppdata)
|
||||||
|
chkAppdata.IsChecked = true;
|
||||||
|
|
||||||
|
if (!GlobalVars.hasWrite)
|
||||||
|
chkAppdata.IsEnabled = false;
|
||||||
|
|
||||||
|
if (GlobalVars.autoDownload)
|
||||||
|
chkAutodl.IsChecked = true;
|
||||||
|
|
||||||
|
if (GlobalVars.isDownloading)
|
||||||
|
{
|
||||||
|
chkAppdata.IsEnabled = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
chkAppdata.IsEnabled = true;
|
||||||
|
|
||||||
|
textBoxLicEnvyupdate.Text = Properties.Licenses.EnvyUpdate;
|
||||||
|
textBoxLicFody.Text = Properties.Licenses.Fody;
|
||||||
|
textBoxLicCostura.Text = Properties.Licenses.CosturaFody;
|
||||||
|
textBoxLicResourceembedder.Text = Properties.Licenses.ResourceEmbedder;
|
||||||
|
textBoxLicWindowscommunitytoolkit.Text = Properties.Licenses.WindowsCommunityToolkit;
|
||||||
|
textBoxLicWpfui.Text = Properties.Licenses.wpfui;
|
||||||
|
textBoxLic7zip.Text = Properties.Licenses._7zip;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CardWeb_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Launching website.");
|
||||||
|
System.Diagnostics.Process.Start("https://github.com/fyr77/EnvyUpdate/");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void chkLog_Checked(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if (!Debug.isVerbose)
|
||||||
|
{
|
||||||
|
Debug.isVerbose = true;
|
||||||
|
Debug.LogToFile("------");
|
||||||
|
Debug.LogToFile("INFO Enabled logging to file. Restart Application to see full startup log.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void chkLog_Unchecked(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if (Debug.isVerbose)
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Disabled logging to file.");
|
||||||
|
if (File.Exists(Path.Combine(GlobalVars.saveDirectory, "envyupdate.log")))
|
||||||
|
File.Move(Path.Combine(GlobalVars.saveDirectory, "envyupdate.log"), Path.Combine(GlobalVars.saveDirectory, "envyupdate." + DateTime.Now.ToString("yyyyMMdd-HHmmss") + ".log"));
|
||||||
|
Debug.isVerbose = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void chkAppdata_Checked(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if (!Directory.Exists(GlobalVars.appdata))
|
||||||
|
Directory.CreateDirectory(GlobalVars.appdata);
|
||||||
|
|
||||||
|
GlobalVars.useAppdata = true;
|
||||||
|
GlobalVars.saveDirectory = GlobalVars.appdata;
|
||||||
|
Util.MoveFilesToAppdata();
|
||||||
|
|
||||||
|
Debug.LogToFile("INFO Switched to AppData directory.");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void chkAppdata_Unchecked(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
GlobalVars.useAppdata = false;
|
||||||
|
GlobalVars.saveDirectory = GlobalVars.directoryOfExe;
|
||||||
|
|
||||||
|
if (Directory.Exists(GlobalVars.appdata))
|
||||||
|
{
|
||||||
|
Util.MoveFilesToExe();
|
||||||
|
Directory.Delete(GlobalVars.appdata, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.LogToFile("INFO Switched to EXE directory.");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void chkAutodl_Checked(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
GlobalVars.autoDownload = true;
|
||||||
|
if (!File.Exists(Path.Combine(GlobalVars.saveDirectory, "autodl.envy")))
|
||||||
|
{
|
||||||
|
File.Create(Path.Combine(GlobalVars.saveDirectory, "autodl.envy"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void chkAutodl_Unchecked(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
GlobalVars.autoDownload = false;
|
||||||
|
if (File.Exists(Path.Combine(GlobalVars.saveDirectory, "autodl.envy")))
|
||||||
|
{
|
||||||
|
File.Delete(Path.Combine(GlobalVars.saveDirectory, "autodl.envy"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
using IWshRuntimeLibrary;
|
using IWshRuntimeLibrary;
|
||||||
|
using Microsoft.Build.Framework.XamlTypes;
|
||||||
using Microsoft.Win32;
|
using Microsoft.Win32;
|
||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
@ -6,13 +7,9 @@ using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Management;
|
using System.Management;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Security.Cryptography;
|
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Xml.Linq;
|
using System.Xml.Linq;
|
||||||
using Windows.Devices.Radios;
|
|
||||||
using Windows.UI.Xaml.Input;
|
|
||||||
|
|
||||||
namespace EnvyUpdate
|
namespace EnvyUpdate
|
||||||
{
|
{
|
||||||
|
@ -59,6 +56,22 @@ namespace EnvyUpdate
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Check for existence of Nvidia GPU
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static bool IsNvidia()
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Checking for existence of Nvidia GPU.");
|
||||||
|
|
||||||
|
foreach (ManagementObject obj in new ManagementObjectSearcher("SELECT * FROM Win32_VideoController").Get())
|
||||||
|
{
|
||||||
|
if (obj["Description"].ToString().ToLower().Contains("nvidia"))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a standard Windows shortcut.
|
/// Creates a standard Windows shortcut.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -110,6 +123,7 @@ namespace EnvyUpdate
|
||||||
{
|
{
|
||||||
Application.Current.MainWindow.Show();
|
Application.Current.MainWindow.Show();
|
||||||
Application.Current.MainWindow.WindowState = WindowState.Normal;
|
Application.Current.MainWindow.WindowState = WindowState.Normal;
|
||||||
|
Application.Current.MainWindow.Activate();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -117,13 +131,11 @@ namespace EnvyUpdate
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static void SelfDelete()
|
public static void SelfDelete()
|
||||||
{
|
{
|
||||||
string appdata = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\envyupdate\\";
|
|
||||||
|
|
||||||
Process process = new Process();
|
Process process = new Process();
|
||||||
ProcessStartInfo startInfo = new ProcessStartInfo
|
ProcessStartInfo startInfo = new ProcessStartInfo
|
||||||
{
|
{
|
||||||
WindowStyle = ProcessWindowStyle.Hidden,
|
WindowStyle = ProcessWindowStyle.Hidden,
|
||||||
WorkingDirectory = appdata,
|
WorkingDirectory = GlobalVars.legacyAppdata,
|
||||||
FileName = "cmd.exe",
|
FileName = "cmd.exe",
|
||||||
Arguments = "/C timeout 5 && del EnvyUpdate.exe"
|
Arguments = "/C timeout 5 && del EnvyUpdate.exe"
|
||||||
};
|
};
|
||||||
|
@ -281,31 +293,21 @@ namespace EnvyUpdate
|
||||||
private static int GetOSID()
|
private static int GetOSID()
|
||||||
{
|
{
|
||||||
// This is faster than making a whole web request and searching through XML. This application only supports 8 possible IDs, so they are hardcoded.
|
// This is faster than making a whole web request and searching through XML. This application only supports 8 possible IDs, so they are hardcoded.
|
||||||
int value = 0;
|
int value;
|
||||||
string OS = Environment.OSVersion.Version.Major.ToString() + "." + Environment.OSVersion.Version.Minor.ToString();
|
|
||||||
|
|
||||||
// Here the 32bit values are used. Later, if the OS is 64bit, we'll add 1, since that is how Nvidia does their IDs.
|
if (Environment.OSVersion.Version.Build < 22000)
|
||||||
switch (OS) //TODO until Win10 EOL: Differentiate between Win10 and Win11
|
|
||||||
{
|
{
|
||||||
case "10.0": //Win10 or Win11
|
// This means we are running Windows 10.
|
||||||
value = 56;
|
|
||||||
break;
|
|
||||||
case "6.1": //Win7
|
|
||||||
value = 18;
|
|
||||||
break;
|
|
||||||
case "6.2": //Win8
|
|
||||||
value = 27;
|
|
||||||
break;
|
|
||||||
case "6.3": //Win8.1
|
|
||||||
value = 40;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Simply increment the ID by 1 if OS is 64bit.
|
|
||||||
if (Environment.Is64BitOperatingSystem)
|
if (Environment.Is64BitOperatingSystem)
|
||||||
value++;
|
value = 57;
|
||||||
|
else
|
||||||
|
value = 56;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// This must be Windows 11 (for now, until Windows 12 comes along)
|
||||||
|
value = 135; // No need to check for 64bit, Win11 can not be 32bit.
|
||||||
|
}
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
@ -335,7 +337,7 @@ namespace EnvyUpdate
|
||||||
{
|
{
|
||||||
GPUName = obj["VideoProcessor"].ToString().ToLower();
|
GPUName = obj["VideoProcessor"].ToString().ToLower();
|
||||||
// Remove any 3GB, 6GB or similar from name. We don't need to know the VRAM to get results.
|
// Remove any 3GB, 6GB or similar from name. We don't need to know the VRAM to get results.
|
||||||
GPUName = Regex.Match(GPUName, "(geforce )((.tx )|(mx))?\\w*\\d*( ti)?").Value;
|
GPUName = Regex.Match(GPUName, "(geforce )((.t.? )|(mx ))?\\w*\\d*( ti)?").Value;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
GPUName = obj["VideoProcessor"].ToString();
|
GPUName = obj["VideoProcessor"].ToString();
|
||||||
|
@ -419,12 +421,7 @@ namespace EnvyUpdate
|
||||||
}
|
}
|
||||||
public static int GetDTCID()
|
public static int GetDTCID()
|
||||||
{
|
{
|
||||||
int dtcid = 0;
|
return 1; // Force update to DCH drivers
|
||||||
if (IsDCH())
|
|
||||||
{
|
|
||||||
dtcid = 1;
|
|
||||||
}
|
|
||||||
return dtcid;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int GetDTID()
|
public static int GetDTID()
|
||||||
|
@ -435,7 +432,7 @@ namespace EnvyUpdate
|
||||||
*/
|
*/
|
||||||
//TODO: find way to differentiate between driver types
|
//TODO: find way to differentiate between driver types
|
||||||
|
|
||||||
if (System.IO.File.Exists(GlobalVars.exedirectory + "sd.envy"))
|
if (System.IO.File.Exists(Path.Combine(GlobalVars.saveDirectory, "sd.envy")))
|
||||||
return 18;
|
return 18;
|
||||||
else
|
else
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -510,10 +507,193 @@ namespace EnvyUpdate
|
||||||
return gpuUrl;
|
return gpuUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void DownloadFile(string fileURL, string savePath)
|
public static void UninstallAll()
|
||||||
{
|
{
|
||||||
//TODO Implement downloading
|
if (System.IO.File.Exists(Path.Combine(GlobalVars.startup, "\\EnvyUpdate.lnk")))
|
||||||
//TODO implement progress bar
|
{
|
||||||
|
Debug.LogToFile("INFO Deleted startup entry.");
|
||||||
|
System.IO.File.Delete(Path.Combine(GlobalVars.startup, "\\EnvyUpdate.lnk"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (System.IO.File.Exists(Path.Combine(GlobalVars.startmenu, "\\EnvyUpdate.lnk")))
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Deleted start menu entry.");
|
||||||
|
System.IO.File.Delete(Path.Combine(GlobalVars.startmenu, "\\EnvyUpdate.lnk"));
|
||||||
|
}
|
||||||
|
if ((GlobalVars.saveDirectory == GlobalVars.legacyAppdata) && System.IO.File.Exists(Path.Combine(GlobalVars.legacyAppdata, "EnvyUpdate.exe")))
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Deleting EnvyUpdate appdata and self.");
|
||||||
|
MessageBox.Show(Properties.Resources.uninstall_legacy_message);
|
||||||
|
Util.SelfDelete();
|
||||||
|
}
|
||||||
|
else if (Directory.Exists(GlobalVars.legacyAppdata))
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Deleting EnvyUpdate appdata folder");
|
||||||
|
Directory.Delete(GlobalVars.legacyAppdata, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool IsDarkTheme()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Debug.LogToFile("INFO Trying to get app theme...");
|
||||||
|
int res = (int)Registry.GetValue("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", "AppsUseLightTheme", -1);
|
||||||
|
switch (res)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
Debug.LogToFile("INFO Using dark theme.");
|
||||||
|
return true;
|
||||||
|
case 1:
|
||||||
|
Debug.LogToFile("INFO Using light theme.");
|
||||||
|
return false;
|
||||||
|
default:
|
||||||
|
throw new IndexOutOfRangeException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
Debug.LogToFile("WARN Could not determine theme. Setting light theme.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string GetDirectDownload(string gpuUrl)
|
||||||
|
{
|
||||||
|
string webcontent;
|
||||||
|
using (var wc = new WebClient())
|
||||||
|
webcontent = wc.DownloadString(gpuUrl);
|
||||||
|
|
||||||
|
string directUrl = Regex.Match(webcontent, "\\/Windows\\/\\d+\\.\\d+\\/[\\w\\d\\/\\-\\.]*exe").Value;
|
||||||
|
directUrl = "https://us.download.nvidia.com" + directUrl;
|
||||||
|
return directUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string GetSevenZip()
|
||||||
|
{
|
||||||
|
string path;
|
||||||
|
if (ExistsOnPath("7zg.exe"))
|
||||||
|
{
|
||||||
|
path = "7zg.exe";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
path = Path.Combine(GlobalVars.saveDirectory, "7zr.exe");
|
||||||
|
using (WebClient client = new WebClient())
|
||||||
|
{
|
||||||
|
client.Headers["User-Agent"] = GlobalVars.useragent;
|
||||||
|
client.DownloadFile(new Uri("https://www.7-zip.org/a/7zr.exe"), path);
|
||||||
|
}
|
||||||
|
Debug.LogToFile("INFO Downloaded 7-zip.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Process ExtractWithSevenZip(string sevenZipPath, string filePath, string destinationDir)
|
||||||
|
{
|
||||||
|
if (!Directory.Exists(destinationDir))
|
||||||
|
Directory.CreateDirectory(destinationDir);
|
||||||
|
|
||||||
|
Process process = new Process();
|
||||||
|
ProcessStartInfo startInfo = new ProcessStartInfo
|
||||||
|
{
|
||||||
|
WindowStyle = ProcessWindowStyle.Minimized,
|
||||||
|
WorkingDirectory = destinationDir,
|
||||||
|
FileName = sevenZipPath,
|
||||||
|
Arguments = "x -aoa -y " + filePath + " Display.Driver Display.Nview Display.Optimus HDAudio MSVCR NVI2 NVPCF PhysX PPC ShieldWirelessController EULA.txt ListDevices.txt setup.cfg setup.exe"
|
||||||
|
};
|
||||||
|
process.EnableRaisingEvents = true;
|
||||||
|
process.StartInfo = startInfo;
|
||||||
|
return process;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void CleanInstallConfig(string filePath)
|
||||||
|
{
|
||||||
|
if (!System.IO.File.Exists(filePath))
|
||||||
|
{
|
||||||
|
Debug.LogToFile("FATAL Driver installer config not found, terminating.");
|
||||||
|
MessageBox.Show(Properties.Resources.error_installing);
|
||||||
|
Environment.Exit(17);
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.LogToFile("INFO Removing GFE content from installer config.");
|
||||||
|
|
||||||
|
string outfile = filePath + ".out";
|
||||||
|
|
||||||
|
StreamReader sr = new StreamReader(filePath);
|
||||||
|
StreamWriter sw = new StreamWriter(outfile);
|
||||||
|
string line;
|
||||||
|
|
||||||
|
while ((line = sr.ReadLine()) != null)
|
||||||
|
{
|
||||||
|
if (new[] { "EulaHtmlFile", "FunctionalConsentFile", "PrivacyPolicyFile" }.Any(c => line.Contains(c)))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
sw.WriteLine(line);
|
||||||
|
}
|
||||||
|
|
||||||
|
sw.Close();
|
||||||
|
sr.Close();
|
||||||
|
|
||||||
|
System.IO.File.Delete(filePath);
|
||||||
|
System.IO.File.Move(outfile, filePath);
|
||||||
|
|
||||||
|
Debug.LogToFile("INFO Finished removing GFE content from installer config.");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool ExistsOnPath(string fileName)
|
||||||
|
{
|
||||||
|
return GetFullPath(fileName) != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string GetFullPath(string fileName)
|
||||||
|
{
|
||||||
|
if (System.IO.File.Exists(fileName))
|
||||||
|
return Path.GetFullPath(fileName);
|
||||||
|
|
||||||
|
var values = Environment.GetEnvironmentVariable("PATH");
|
||||||
|
foreach (var path in values.Split(Path.PathSeparator))
|
||||||
|
{
|
||||||
|
var fullPath = Path.Combine(path, fileName);
|
||||||
|
if (System.IO.File.Exists(fullPath))
|
||||||
|
return fullPath;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool HasWritePermissions()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
System.IO.File.Create(Path.Combine(GlobalVars.saveDirectory, "writeable.envy")).Close();
|
||||||
|
System.IO.File.Delete(Path.Combine(GlobalVars.saveDirectory, "writeable.envy"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void MoveFilesToAppdata()
|
||||||
|
{
|
||||||
|
string[] envyFiles = Directory.GetFiles(GlobalVars.directoryOfExe, "*.envy");
|
||||||
|
foreach (var item in envyFiles)
|
||||||
|
System.IO.File.Move(item, Path.Combine(GlobalVars.appdata, Path.GetFileName(item)));
|
||||||
|
if (System.IO.File.Exists(Path.Combine(GlobalVars.directoryOfExe, "envyupdate.log")))
|
||||||
|
System.IO.File.Move(Path.Combine(GlobalVars.directoryOfExe, "envyupdate.log"), Path.Combine(GlobalVars.appdata, "envyupdate.log"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void MoveFilesToExe()
|
||||||
|
{
|
||||||
|
string[] envyFiles = Directory.GetFiles(GlobalVars.appdata, "*.envy");
|
||||||
|
foreach (var item in envyFiles)
|
||||||
|
System.IO.File.Move(item, Path.Combine(GlobalVars.directoryOfExe, Path.GetFileName(item)));
|
||||||
|
if (System.IO.File.Exists(Path.Combine(GlobalVars.appdata, "envyupdate.log")))
|
||||||
|
System.IO.File.Move(Path.Combine(GlobalVars.appdata, "envyupdate.log"), Path.Combine(GlobalVars.directoryOfExe, "envyupdate.log"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
2
LICENSE
2
LICENSE
|
@ -1,6 +1,6 @@
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2019-2023 Jakob Senkl
|
Copyright (c) 2019-2024 fyr77
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|
40
README.md
40
README.md
|
@ -1,35 +1,40 @@
|
||||||

|
|
||||||
|
|
||||||
# Important Information
|
# Important Information
|
||||||
|
## I am no longer working on this project and I am looking for a new maintainer. Please see [the corresponding issue](https://vcs.diluvian.cc/fyr77/EnvyUpdate/issues/53) for more details.
|
||||||
|
|
||||||
Nvidia has discontinued non-DCH drivers. This means only Windows 10 and Windows 11 can get the most recent driver versions.
|

|
||||||
|
|
||||||
If you are running Standard (non-DCH) drivers right now, EnvyUpdate will **NOT** display newer driver versions until you have manually updated to DCH drivers.
|
|
||||||
|
|
||||||
# EnvyUpdate
|
# EnvyUpdate
|
||||||
A small portable update checker application for Nvidia GPUs
|
A small portable update checker application for Nvidia GPUs
|
||||||
|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||
|
|
||||||
## How to use
|
## How to use
|
||||||
|
|
||||||
Download the [latest release](https://github.com/fyr77/EnvyUpdate/releases/latest/download/EnvyUpdate.exe) (or as a [.zip](https://github.com/fyr77/EnvyUpdate/releases/latest/download/EnvyUpdate.zip)) and run it. Windows SmartScreen Messages can be safely ignored. They only happen because this project is not digitally signed.
|
Download the latest release and run it. Windows SmartScreen Messages can be safely ignored. They only happen because this project is not digitally signed.
|
||||||
|
|
||||||
The application itself does not update itself. If you notice any bugs or issues, be sure to check for a new version on GitHub!
|
The application itself does not update itself. If you notice any bugs or issues, be sure to check for a new version on GitHub!
|
||||||
|
|
||||||
Enabling Autostart will create a shortcut of EnvyUpdate in the Windows startup folder.
|
Enabling Autostart will create a shortcut of EnvyUpdate in the Windows startup folder (shell:startup).
|
||||||
|
|
||||||
|
### Virus warnings
|
||||||
|
|
||||||
|
Sometimes EnvyUpdate is flagged as a virus by Windows Defender or other antivirus software. This is a **false positive**, caused by EnvyUpdate reading a few values from the Windows registry and looking for files.
|
||||||
|
|
||||||
|
For extracting the driver installer 7-Zip is downloaded if it cannot be found on the user's system. This may also trigger antivirus warnings, but is necessary for the automatic driver installation to work.
|
||||||
|
|
||||||
|
### Using AppData for configuration files
|
||||||
|
|
||||||
|
Starting with 3.2, EnvyUpdate supports saving its configuration files to AppData/Roaming instead of saving it next to the main exe file. You can enable it in the settings of the application.
|
||||||
|
|
||||||
|
If EnvyUpdate fails to write to the folder containing the exe file, this option will be enabled automatically.
|
||||||
|
|
||||||
## Compatibility
|
## Compatibility
|
||||||
|
|
||||||
The application should be compatible with all Nvidia GeForce GPUs that have their drivers available on the nvidia.com download page and runs on Windows 10 and up.
|
The application should be compatible with all Nvidia GeForce GPUs that have their drivers available on the nvidia.com download page and runs on Windows 10 and up.
|
||||||
|
|
||||||
It is tested with GeForce Series GPUs. Generally others might work, but they are (currently) untested.
|
It is tested with GeForce Series GPUs. Other series (e.g. Quadro) are unlikely to work and are not supported - if you have a Quadro card and are willing to implement support for them, feel free to reach out or create a PR.
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
||||||
This application is currently maintained and developed by me (fyr77) alone in my free time.
|
This application is currently unmaintained and developed by me (fyr77) alone in my free time.
|
||||||
|
|
||||||
I always try to implement critical fixes as fast as I can, but other features and minor bug fixes may take a few days or weeks to implement.
|
I always try to implement critical fixes as fast as I can, but other features and minor bug fixes may take a few days or weeks to implement.
|
||||||
|
|
||||||
|
@ -39,17 +44,18 @@ If you want to help me develop EnvyUpdate, you can start by creating issues with
|
||||||
|
|
||||||
* [TinyNvidiaUpdateChecker](https://github.com/ElPumpo/TinyNvidiaUpdateChecker) - a command line update checker and installer. Inspired EnvyUpdate to begin with.
|
* [TinyNvidiaUpdateChecker](https://github.com/ElPumpo/TinyNvidiaUpdateChecker) - a command line update checker and installer. Inspired EnvyUpdate to begin with.
|
||||||
* [nvidia-update](https://github.com/ZenitH-AT/nvidia-update) - a Powershell script to check for driver updates
|
* [nvidia-update](https://github.com/ZenitH-AT/nvidia-update) - a Powershell script to check for driver updates
|
||||||
* [Disable-Nvidia-Telemtry](https://github.com/NateShoffner/Disable-Nvidia-Telemetry) - does pretty much what the name says. It disables Nvidia Telemetry.
|
* [Disable-Nvidia-Telemetry](https://github.com/NateShoffner/Disable-Nvidia-Telemetry) - does pretty much what the name says. It disables Nvidia Telemetry.
|
||||||
* [NVCleanInstall](https://www.techpowerup.com/nvcleanstall/) - a closed-source application by TechPowerUp which does quite a lot of cool things.
|
* [NVCleanInstall](https://www.techpowerup.com/nvcleanstall/) - a closed-source application by TechPowerUp which does quite a lot of cool things.
|
||||||
|
|
||||||
EnvyUpdate is not a replacement for any of these tools. I will still try to implement as many features in EnvyUpdate as possible while keeping the simple interface and as little settings as possible.
|
EnvyUpdate is not a replacement for any of these tools. I will still try to implement as many features in EnvyUpdate as possible while keeping the simple interface and as little settings as possible.
|
||||||
|
|
||||||
## Licenses
|
## Licenses
|
||||||
|
|
||||||
* This project: [MIT](https://github.com/fyr77/EnvyUpdate/blob/master/LICENSE)
|
* This project: [MIT](https://https://vcs.diluvian.cc/fyr77/EnvyUpdate/blob/master/LICENSE)
|
||||||
* Fody (dependency of Costura.Fody): [MIT](https://github.com/Fody/Fody/blob/master/License.txt)
|
* Fody (dependency of Costura.Fody): [MIT](https://github.com/Fody/Fody/blob/master/License.txt)
|
||||||
* Costura.Fody (for embedding DLLs into the main executable): [MIT](https://github.com/Fody/Costura/blob/develop/LICENSE)
|
* Costura.Fody (for embedding DLLs into the main executable): [MIT](https://github.com/Fody/Costura/blob/develop/LICENSE)
|
||||||
* wpf-notifyicon (for showing an icon in the system tray): [CPOL](https://github.com/hardcodet/wpf-notifyicon/blob/master/LICENSE)
|
* Resource Embedder: [MIT](https://www.nuget.org/packages/Resource.Embedder/)
|
||||||
* Resource Embedder: [MIT](https://github.com/MarcStan/resource-embedder/blob/master/LICENSE)
|
|
||||||
* Windows Community Toolkit: [MIT](https://github.com/CommunityToolkit/WindowsCommunityToolkit/blob/main/License.md)
|
* Windows Community Toolkit: [MIT](https://github.com/CommunityToolkit/WindowsCommunityToolkit/blob/main/License.md)
|
||||||
|
* wpfui: [MIT](https://github.com/lepoco/wpfui/blob/main/LICENSE)
|
||||||
|
* 7-Zip R: [GNU LGPL](https://www.7-zip.org/license.txt)
|
||||||
* Icon made by Freepik from www.flaticon.com
|
* Icon made by Freepik from www.flaticon.com
|
||||||
|
|
Reference in a new issue