Compare commits

...

19 commits
3.4 ... master

Author SHA1 Message Date
84dc1367d8 Update README.md 2025-07-21 11:16:15 +02:00
18816f3fbe fix links 2025-07-21 11:15:54 +02:00
625e509ede Update README.md 2025-07-18 12:03:32 +02:00
0a5227b071
Update README.md 2024-10-24 15:54:30 +02:00
c46294b46b
Update README.md 2024-10-24 09:29:38 +02:00
672449fb3e Update Nuget 2024-08-06 10:39:45 +02:00
09730bfbaf
Update README.md 2024-03-12 18:24:51 +01:00
b019023344 bump version 2024-02-26 20:05:47 +01:00
ee6489e090
Merge pull request #44 from fyr77/feature-autodownload
Feature autodownload
2024-02-26 20:03:05 +01:00
a4a97f7b99 finalize download check 2024-02-26 20:02:16 +01:00
76425a3c50 fix button 2024-02-26 19:50:56 +01:00
9eba20f28a save autodl setting 2024-02-26 19:46:46 +01:00
a271150b0c handle running download 2024-02-26 19:42:06 +01:00
bbe0e8dde9 Merge branch 'master' 2024-02-26 19:27:12 +01:00
48bb49671a handle unfinished downloads 2024-02-26 19:23:07 +01:00
6a97161ddd
Merge pull request #43 from fyr77/master
include changes from master
2024-02-26 19:03:18 +01:00
1aa93e2267 bump version 2024-02-25 15:09:21 +01:00
8ce6a92146 add notification exception handling 2024-02-24 13:44:34 +01:00
b9e7aac55f add auto download feature 2024-02-23 20:30:40 +01:00
12 changed files with 161 additions and 39 deletions

View file

@ -210,6 +210,15 @@ namespace EnvyUpdate
if (skippedVer != onlineDriv) 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."); Debug.LogToFile("INFO Showing update popup notification.");
Notify.ShowDrivUpdatePopup(); Notify.ShowDrivUpdatePopup();
} }
@ -340,25 +349,34 @@ namespace EnvyUpdate
private void buttonDownload_Click(object sender, RoutedEventArgs e) private void buttonDownload_Click(object sender, RoutedEventArgs e)
{ {
progressbarDownload.Visibility = Visibility.Visible; if (GlobalVars.isDownloading)
buttonDownload.IsEnabled = false;
if (File.Exists(Path.Combine(GlobalVars.saveDirectory, onlineDriv + "-nvidia-installer.exe.downloading")))
{ {
Debug.LogToFile("WARN Found previous unfinished download, retrying."); Debug.LogToFile("WARN A download is already running.");
File.Delete(Path.Combine(GlobalVars.saveDirectory, onlineDriv + "-nvidia-installer.exe.downloading")); ShowSnackbar(Wpf.Ui.Common.ControlAppearance.Danger, Wpf.Ui.Common.SymbolRegular.ErrorCircle24, Properties.Resources.info_download_running, Properties.Resources.info_download_running_title);
} }
Thread thread = new Thread(() => { else
using (WebClient client = new WebClient()) {
progressbarDownload.Visibility = Visibility.Visible;
buttonDownload.IsEnabled = false;
GlobalVars.isDownloading = true;
if (File.Exists(Path.Combine(GlobalVars.saveDirectory, onlineDriv + "-nvidia-installer.exe.downloading")))
{ {
client.Headers["User-Agent"] = GlobalVars.useragent; Debug.LogToFile("WARN Found previous unfinished download, retrying.");
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged); File.Delete(Path.Combine(GlobalVars.saveDirectory, onlineDriv + "-nvidia-installer.exe.downloading"));
client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
client.DownloadFileAsync(new Uri(Util.GetDirectDownload(gpuURL)), Path.Combine(GlobalVars.saveDirectory, onlineDriv + "-nvidia-installer.exe.downloading"));
} }
}); Thread thread = new Thread(() => {
thread.Start(); using (WebClient client = new WebClient())
Debug.LogToFile("INFO Started installer download."); {
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) void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
@ -376,6 +394,7 @@ namespace EnvyUpdate
Application.Current.Dispatcher.Invoke(new Action(() => { Application.Current.Dispatcher.Invoke(new Action(() => {
buttonDownload.IsEnabled = true; buttonDownload.IsEnabled = true;
progressbarDownload.Visibility = Visibility.Collapsed; progressbarDownload.Visibility = Visibility.Collapsed;
GlobalVars.isDownloading = false;
})); }));
if (e.Error == null) if (e.Error == null)
{ {

View file

@ -271,7 +271,7 @@
<Version>5.7.0</Version> <Version>5.7.0</Version>
</PackageReference> </PackageReference>
<PackageReference Include="Fody"> <PackageReference Include="Fody">
<Version>6.8.0</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>
@ -282,7 +282,7 @@
<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.3</Version> <Version>8.0.4</Version>
</PackageReference> </PackageReference>
<PackageReference Include="WPF-UI"> <PackageReference Include="WPF-UI">
<Version>2.1.0</Version> <Version>2.1.0</Version>

View file

@ -19,5 +19,7 @@ namespace EnvyUpdate
public static readonly string useragent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:115.0) Gecko/20100101 Firefox/115.0"; 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 useAppdata = false;
public static bool hasWrite = true; public static bool hasWrite = true;
public static bool autoDownload = false;
public static bool isDownloading = false;
} }
} }

View file

@ -102,8 +102,25 @@ namespace EnvyUpdate
GlobalVars.startMinimized = true; GlobalVars.startMinimized = true;
} }
//Check for old unfinished downloads
string[] leftovers = Directory.GetFiles(GlobalVars.directoryOfExe, "*-nvidia-installer.exe.downloading");
if (leftovers.Length > 0)
{
foreach (string leftover in leftovers)
{
Debug.LogToFile("INFO Deleting leftover download " + leftover);
File.Delete(leftover);
}
}
GlobalVars.isMobile = Util.IsMobile(); GlobalVars.isMobile = Util.IsMobile();
Debug.LogToFile("INFO Mobile: " + GlobalVars.isMobile); Debug.LogToFile("INFO Mobile: " + GlobalVars.isMobile);
if (File.Exists(Path.Combine(GlobalVars.saveDirectory, "autodl.envy")))
{
Debug.LogToFile("INFO Auto-download is enabled.");
GlobalVars.autoDownload = true;
}
} }
private void Window_StateChanged(object sender, EventArgs e) private void Window_StateChanged(object sender, EventArgs e)
{ {

View file

@ -6,9 +6,16 @@ namespace EnvyUpdate
{ {
public static void ShowDrivUpdatePopup() public static void ShowDrivUpdatePopup()
{ {
var toast = new ToastContentBuilder(); try
toast.AddText(Properties.Resources.update_popup_message); {
toast.Show(); var toast = new ToastContentBuilder();
toast.AddText(Properties.Resources.update_popup_message);
toast.Show();
}
catch (System.Exception ex)
{
Debug.LogToFile("WARN Could not show notification. Error: " + ex.Message);
}
} }
} }
} }

View file

@ -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("3.4")] [assembly: AssemblyVersion("3.6")]
[assembly: AssemblyFileVersion("3.4")] [assembly: AssemblyFileVersion("3.6")]

View file

@ -105,6 +105,24 @@ namespace EnvyUpdate.Properties {
} }
} }
/// <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> /// <summary>
/// Looks up a localized string similar to Driver installer successfully downloaded.. /// Looks up a localized string similar to Driver installer successfully downloaded..
/// </summary> /// </summary>
@ -267,6 +285,15 @@ namespace EnvyUpdate.Properties {
} }
} }
/// <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> /// <summary>
/// Looks up a localized string similar to Enable logging to file. /// Looks up a localized string similar to Enable logging to file.
/// </summary> /// </summary>

View file

@ -132,6 +132,12 @@
<data name="info_download_error_title" xml:space="preserve"> <data name="info_download_error_title" xml:space="preserve">
<value>Fehler beim Herunterladen</value> <value>Fehler beim Herunterladen</value>
</data> </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"> <data name="info_download_success" xml:space="preserve">
<value>Treiber-Installationsdatei erfolgreich heruntergeladen.</value> <value>Treiber-Installationsdatei erfolgreich heruntergeladen.</value>
</data> </data>
@ -186,6 +192,9 @@
<data name="ui_enable_appdata" xml:space="preserve"> <data name="ui_enable_appdata" xml:space="preserve">
<value>Programmdaten in AppData speichern</value> <value>Programmdaten in AppData speichern</value>
</data> </data>
<data name="ui_enable_autodownload" xml:space="preserve">
<value>Updates automatisch herunterladen</value>
</data>
<data name="ui_enable_logging" xml:space="preserve"> <data name="ui_enable_logging" xml:space="preserve">
<value>Programm-Log in Datei schreiben</value> <value>Programm-Log in Datei schreiben</value>
</data> </data>

View file

@ -132,6 +132,12 @@
<data name="info_download_error_title" xml:space="preserve"> <data name="info_download_error_title" xml:space="preserve">
<value>Error while downloading</value> <value>Error while downloading</value>
</data> </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"> <data name="info_download_success" xml:space="preserve">
<value>Driver installer successfully downloaded.</value> <value>Driver installer successfully downloaded.</value>
</data> </data>
@ -186,6 +192,9 @@
<data name="ui_enable_appdata" xml:space="preserve"> <data name="ui_enable_appdata" xml:space="preserve">
<value>Save files to AppData</value> <value>Save files to AppData</value>
</data> </data>
<data name="ui_enable_autodownload" xml:space="preserve">
<value>Download updates automatically</value>
</data>
<data name="ui_enable_logging" xml:space="preserve"> <data name="ui_enable_logging" xml:space="preserve">
<value>Enable logging to file</value> <value>Enable logging to file</value>
</data> </data>

View file

@ -35,9 +35,19 @@
<ui:ToggleSwitch x:Name="chkLog" Checked="chkLog_Checked" Unchecked="chkLog_Unchecked"/> <ui:ToggleSwitch x:Name="chkLog" Checked="chkLog_Checked" Unchecked="chkLog_Unchecked"/>
</ui:CardControl> </ui:CardControl>
<ui:CardControl Grid.Row="3" Margin="0,12,0,0" Icon="Folder24" Header="{x:Static p:Resources.ui_enable_appdata}" > <Grid Grid.Row="3">
<ui:ToggleSwitch x:Name="chkAppdata" Checked="chkAppdata_Checked" Unchecked="chkAppdata_Unchecked"/> <Grid.ColumnDefinitions>
</ui:CardControl> <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"/> <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"> <ScrollViewer Grid.Row="5" MaxHeight="700" HorizontalAlignment="Stretch">

View file

@ -30,6 +30,16 @@ namespace EnvyUpdate
if (!GlobalVars.hasWrite) if (!GlobalVars.hasWrite)
chkAppdata.IsEnabled = false; chkAppdata.IsEnabled = false;
if (GlobalVars.autoDownload)
chkAutodl.IsChecked = true;
if (GlobalVars.isDownloading)
{
chkAppdata.IsEnabled = false;
}
else
chkAppdata.IsEnabled = true;
textBoxLicEnvyupdate.Text = Properties.Licenses.EnvyUpdate; textBoxLicEnvyupdate.Text = Properties.Licenses.EnvyUpdate;
textBoxLicFody.Text = Properties.Licenses.Fody; textBoxLicFody.Text = Properties.Licenses.Fody;
textBoxLicCostura.Text = Properties.Licenses.CosturaFody; textBoxLicCostura.Text = Properties.Licenses.CosturaFody;
@ -91,5 +101,23 @@ namespace EnvyUpdate
Debug.LogToFile("INFO Switched to EXE directory."); 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"));
}
}
} }
} }

View file

@ -1,24 +1,18 @@
# Important Information # Important Information
NVIDIA is planning to release their new "[NVIDIA App](https://www.nvidia.com/en-us/software/nvidia-app/)", which will **replace** GeForce Experience and the Control Center. I do not yet know how the new driver package will look like, therefore I cannot guarantee that the update to that new driver that includes the new app will work properly when it releases. I will attempt to test it as soon as it is available. ## 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.
![Logo](https://github.com/fyr77/envyupdate/blob/master/res/banner_bg.png?raw=true) ![Logo](https://vcs.diluvian.cc/fyr77/EnvyUpdate/raw/branch/master/res/banner.png)
# EnvyUpdate # EnvyUpdate
A small portable update checker application for Nvidia GPUs A small portable update checker application for Nvidia GPUs
![License](https://img.shields.io/github/license/fyr77/envyupdate?style=for-the-badge)
![Issues](https://img.shields.io/github/issues/fyr77/envyupdate?style=for-the-badge)
![Version](https://img.shields.io/github/v/release/fyr77/envyupdate?style=for-the-badge)
## 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.
Legacy 2.x versions (old UI, no automatic driver installation) will continue to be supported and fixed for the time being. Please see [the v2 branch](https://github.com/fyr77/EnvyUpdate/tree/v2) for these.
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 ### Virus warnings
@ -36,11 +30,11 @@ If EnvyUpdate fails to write to the folder containing the exe file, this option
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.
@ -57,7 +51,7 @@ EnvyUpdate is not a replacement for any of these tools. I will still try to impl
## 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)
* Resource Embedder: [MIT](https://www.nuget.org/packages/Resource.Embedder/) * Resource Embedder: [MIT](https://www.nuget.org/packages/Resource.Embedder/)