Showing posts with label VMWARE. Show all posts
Showing posts with label VMWARE. Show all posts

Workaround for suppressing version updates in Remarkable Windows client software:

When deploying the Remarkable desktop application within a Windows enterprise environment, it introduces challenges due to its update mechanism. The application automatically checks for new updates every time it starts from the internet using WinSparkle.dll, which we would like to control but cannot. The first launch gives us this screen if there is a newer version available. But “Skip this version” doesn’t work.


Instead this process automatically downloads an .exe setup update file that attempts to execute, requiring administrative privileges typically unavailable to standard enterprise users. This results in users being frequently interrupted by update popups and needing IT support to install updates, which disrupts workflow.


Analyzing the exact Issue

After doing some analyzing I found out that the Remarkable application's installer is created using the free Qt installer framework, and the installed program uses the WinSparkle software update library to manage its updates. WinSparkle checks for updates via a user registry key: HKCU\SOFTWARE\Remarkable\Winsparkle\CheckForUpdates=1 (reg_sz type).











Attempting to hit the “Skip this version” button doesn’t work, and changing the registry value from "1" to "0" to suppress updates is futile, as the application resets all values with each launch. Similarly, I tried removing write access to this registry key which leads to error messages about missing internet connections, which also isn't a viable workaround.

My solution: Create a PowerShell Script to autoclose the updater:

The correct approach is always contacting the vendor and convince them to fix their own software, so I contacted Remarkable's support, but they only responded with: 'As per consultation with our technical support specialists, any workaround to bypass the desktop app's update prompt is not feasible, as every time the app opens, it prompts for updates.'

In response, I developed a PowerShell script, "Remarkable Update Closer," which automatically dismisses the update dialog, thus maintaining user workflow without interruptions. I recommend compiling it as an .EXE file to remove all PowerShell windows.

Remarkable Update Closer

  • Core Functionality: The script identifies and closes dialog windows with specific titles generated by the Remarkable application.
  • API Usage: Uses Windows API (User32.dll) to handle and manipulate windows.

Script Variants

  • Remarkable-Update-Closer.ps1: Latest version have some more CPU optimization, process-aware monitoring, logging for behavior tracking, and error handling.

Installation and Use

  • Prerequisites: PowerShell must be installed, and for compiling to .exe, PS2EXE is recommended.

Compiling to .exe:

    • Install PS2EXE with Install-Module -Name PS2EXE -Scope CurrentUser.
    • Compile with Invoke-PS2EXE -InputFile "Remarkable-Update-Closer.ps1" -OutputFile "Remarkable-Update-Closer.exe".
    • To run without showing a console window and add an icon, use: Invoke-PS2EXE .\Remarkable-Update-Closer.ps1 -NoConsole -IconFile "C:\Temp\Icon.ico"

Usage:

  • The script can be launched at system startup via a scheduled task or integrated into an App-V or MSIX package. My version of the script also checks if remarkable.exe is running; if not, it terminates itself to avoid unnecessary CPU usage. Therefore, if using a scheduled task that runs continuously, you might need to modify the script to remove this check. A startup script is a script that runs automatically each time a user logs in or a system starts, designed to execute specific tasks or configurations. An alternative to scheduled tasks or App-V userscript is to use such a startup script. With an App-V startup process script, you ensure the script only runs when Remarkable is launched, conserving CPU resources. Without App-V, you can create a startup script that first starts Remarkable and then this script, then update the shortcut to point to this new script instead of remarkable.exe.
  • Winget and Automatic Updates While Winget could theoretically manage updates automatically, we do not allow Winget traffic through our proxy, and we only trust repositories owned by the software manufacturer. This stance might change with upcoming adjustments by Microsoft to how Winget operates, especially concerning security in Virtual Desktop Infrastructures (VDI).

 

You can find the complete PowerShell script I've developed here: Remarkable Update Closer on GitHub.

For more on configuring WinSparkle's behavior, particularly regarding updates, please refer directly to the WinSparkle Registry SettingsBy implementing this solution, you can ensure that update dialogs no longer disrupt your user’s workflow, allowing them to use Remarkable seamlessly in an enterprise environment. 

But beware there will always be a slight delay (1-3s on my test machine) from the update window shows until it closes because of scheduling to conserve CPU cycles and also PowerShell is not the most effective scripting language.

 

 

How to Sequence Ibm Spss 26 (and 25):

Normally Ibm Spss have been  considered an easy application to sequence in the past.

But after we Sequenced version 26 on 1809 I had a rundown with the following error message when I lunched the application on the client:
App-V Subsystem 'Virtual Filesystem' could not be initialized. {error: 0x74300E0A-0x20006}

 

Googling this got me down a rabbit hole of a lot of old App-V treads, but nothing could help me.

The solution was actually pretty easy, throw away the 1809 sequencer and use the old 1709 sequencer.

How to Sequence:

The following cmd file will install your program. Just change LSHOST to your license server, and do the same to COMPANYNAME.

Regsvr could be removed, it was a thing from the past, but it won’t do anything.

echo Installing (1/3): Ibm Spss 26.x64

msiexec.exe /i "%~dp0IBM SPSS Statistics 26.msi" LICENSETYPE="Network" LSHOST="license.server.com" INSTALLPYTHON="1" COMPANYNAME="Your Company" DISABLEADVTSHORTCUTS=1 /qr /norestart /L*v c:\temp\spss26.log

echo Return Code: %ERRORLEVEL%

echo Installing (2/3): Regsvr of spsswin.dll:

regsvr32.exe /s "%CommmonProgramFiles%\IBM\SPSS\COM\spsswin.dll"

echo Return Code: %ERRORLEVEL%

echo Installing (3/3): Delete run once keys from 64 bit HKLM hive

reg delete "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" /f /reg:64

echo Return Code: %ERRORLEVEL%

 

 

 

Documentation for App-V-Sequenced application: Ibm Spss

Documention created: 06.09.2019 11:04

 

 

Installation

••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••

 

Sequenced on Windows Version:10.0.17763.0 system with App-V Sequencer version: 10.0.16299.15

Sequenced created:06.09.2019 08:46:29

 

••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••

Appvnavn:Ibm Spss

Version:0.0.0.1

PackageID=5ea38113-1b4b-4ff9-b6d6-77a997a300a8

VersionID=852d4686-932d-4a83-9cc0-1a36f4dea2f3

••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••

 

-----------------------------------------------------

Prerequirements before Sequencing:

-----------------------------------------------------

Sequenced on 1709 Sequencer machine. 1809 sequencer makes package crash on launch on our 1809 image with this error:

App-V Subsystem 'Virtual Filesystem' could not be initialized. {error: 0x74300E0A-0x20006}.

Install all package Vcreds into sequencer machine, could be found in vcred folder under application when installed. Also install them on your production computers.

-----------------------------------------------------

Sequence Install with the following parameters:

-----------------------------------------------------

Load your appv template file

Remove vcreds capture from package

Run install.bat

-----------------------------------------------------

Package information:

-----------------------------------------------------

-- Machinescripts --

-- Userscripts --

 

-- Cleanup Package: (We just use tmedit cleanup to do this, see pictures for the things you could remove.

 

Picture 1

Picture 2

Picture 3

Delete files:

Delete installer cache from c:\windows\installer\ Save a lot of space by deleting msi from package

Delete the following registry settings:

Remove internet settings\zonemap from package

Package settings:

VFS write: on

-----------------------------------------------------------------------------

 

 

Added Scriptfiles:

Deleted registry values:

  

Deleted files:

    Root\VFS\AppVPackageDrive\Temp\spss26.log

    Root\VFS\Windows\Installer\5771e.msi

 

••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••

Install commandline (COMPLETE,ADD&PUBLISH&MOUNT):

                powershell.exe "Add-AppvClientPackage -Path 'Ibm Spss.appv' | Publish-AppvClientPackage –Global | Mount-AppvClientPackage"

 

AddPackage commandline (ADD&MOUNT):

                powershell.exe "Add-AppvClientPackage -Path 'Ibm Spss.appv' | Mount-AppvClientPackage"

 

PublishPackage commandline (PUBLISH&MOUNT):

                powershell.exe "Publish-AppvClientPackage -Name 'Ibm Spss' –Global | Mount-AppvClientPackage"

 

Uninstall commandline (COMPLETE,UNPUBLISH&REMOVE):

                powershell.exe "Unpublish-AppvClientPackage -Name 'Ibm Spss' -Global | Remove-AppVClientPackage"

 

UnpublishPackage commandline (UNPUBLISH):

                powershell.exe "Unpublish-AppvClientPackage -Name 'Ibm Spss' -Global"

 

UnpublishPackage commandline (UNPUBLISH):

                powershell.exe "Unpublish-AppvClientPackage -packageid 5ea38113-1b4b-4ff9-b6d6-77a997a300a8 -versionid 852d4686-932d-4a83-9cc0-1a36f4dea2f3 -global |Remove-AppvClientPackage"

Building a clean windows 10 1709 x64 Sequencer

Building a clean windows 10 x64 sequencer

Been using guides from Rorymon and Tmurgent blogs.

While they are a great starting point, they do not cover all the latest and «greatest» bloat MS provide for you.

Here is the old template list from our Current Vmware Worstation Sequencer Image. It was made with the following properties:

Install Window 10
Username: admin

Install VC++
Newest to oldest
2017-2005

Add .NET 3.5: Copy sxs folder too c:\temp. Run DISM /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:C:\temp\sxs

Disable Windows Defender:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender
DisableAntiSpyware"=dword:00000001
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender\Real-Time Protection
DisableRealtimeMonitoring"=dword:00000001

 

Disable Windows 10 feature Upgrade:

HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\Windows\CurrentVersion\WindowsUpdate]
"AllowOSUpgrade "=dword:00000000
HKEY_LOCAL_MACHINE\SOFTWARE \Policies\Microsoft\Windows\WindowsUpdate]
"DisableOSUpgrade "=dword:00000001

- Disable Windows Search service
- Disable Offline Files service
- Disable Diagnostic Policy Service 
- Disable Windows Update service (This is getting trickier now )
   Double click Windows Update service to open properties
   Click Stop to halt the service.
   Click the Log On tab
   Select Log on as: This account: .\Guest
   Leave password blank

   Click Apply


Install ADK - Sequencer + Auto-Sequencer
Install PS module PassiveInstall
Install AppV Manage
Install ACE
Procmon and procexp

Uninstall OneDrive
Uninstall all removable apps

CPU: 1 Processor 2 cores
Memory: 8GB 
Network adapter: bridged
Disk: 120GB

Proxy enabled
Show hidden files
Show file extensions

Screen off: never
Hibernation: never

 

 

 

We also had to disable:

“Background transfer service”(BITS) and “Delivery Optimization service

This is the registry of a completely empty package with Bits and enabled:

 

As we can see, there is a lot of unwanted registry values getting captures, so after disabling BITS we get this picture:

 

After Disabling Delivery Optimization service we get this picture. Looking much better J

 

It’s looking better now, but there was still too much stuff in here, so I also made a Sequencer template that has to be loaded every time you start sequencing, its removing stuff like Cloud store and Cortona stuff.

<?xml version="1.0" encoding="utf-8"?>

<SequencerTemplate xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <SequencerTemplateVersion>2</SequencerTemplateVersion>

  <ID>ea4fd954-e515-46a5-93c7-9f1fd3775501</ID>

  <HashOverall>236761879</HashOverall>

  <HashSettings>2</HashSettings>

  <HashFileExclusions>-1112920618</HashFileExclusions>

  <HashRegExclusions>610179163</HashRegExclusions>

  <hashTargetOSes>371857150</hashTargetOSes>

  <AllowMU>false</AllowMU>

  <AppendPackageVersionToFilename>true</AppendPackageVersionToFilename>

  <AllowLocalInteractionToCom>false</AllowLocalInteractionToCom>

  <AllowLocalInteractionToObject>false</AllowLocalInteractionToObject>

  <FullVFSWriteMode>false</FullVFSWriteMode>

  <ExcludePreExistingSxSAndVC>false</ExcludePreExistingSxSAndVC>

  <FileExclusions>

    <string>[{AppData}]\Microsoft\AppV</string>

    <string>[{AppVPackageDrive}]\$Recycle.Bin</string>

    <string>[{AppVPackageDrive}]\System Volume Information</string>

    <string>[{Cache}]</string>

    <string>[{Common AppData}]\Microsoft\Crypto</string>

    <string>[{Common AppData}]\Microsoft\Microsoft Antimalware</string>

    <string>[{Common AppData}]\Microsoft\Microsoft Security Client</string>

    <string>[{Common AppData}]\Microsoft\Search\Data</string>

    <string>[{Common AppData}]\Microsoft\Windows Defender</string>

    <string>[{Cookies}]</string>

    <string>[{CryptoKeys}]</string>

    <string>[{History}]</string>

    <string>[{Local AppData}]</string>

    <string>[{Local AppData}]\Temp</string>

    <string>[{LocalAppDataLow}]</string>

    <string>[{Personal}]</string>

    <string>[{Profile}]\Local Settings</string>

    <string>[{Profile}]\NTUSER.DAT.LOG1</string>

    <string>[{Profile}]\NTUSER.DAT.LOG2</string>

    <string>[{ProgramFilesX86}]\Windows Kits\10\Microsoft Application Virtualization\Sequencer</string>

    <string>[{ProgramFiles}]\Microsoft Security Client</string>

    <string>[{ProgramFiles}]\Windows Defender</string>

    <string>[{Recent}]</string>

    <string>[{Windows}]\Debug</string>

    <string>[{Windows}]\Logs\CBS</string>

    <string>[{Windows}]\Temp</string>

    <string>[{Windows}]\WindowsUpdate.log</string>

    <string>[{Windows}]\WinSxS\ManifestCache</string>

    <string>{AppData}]\Microsoft\AppV</string>

    <string>{AppVPackageDrive}]\$Recycle.Bin</string>

    <string>{AppVPackageDrive}]\System Volume Information</string>

    <string>{AppVSystem32Logfiles}]</string>

    <string>{Cache}]</string>

    <string>{Common AppData}]\Microsoft\Crypto</string>

    <string>{Common AppData}]\Microsoft\RAC</string>

    <string>{Common AppData}]\Microsoft\Search\Data</string>

    <string>{Cookies}]</string>

    <string>{History}]</string>

    <string>{Local AppData}]</string>

    <string>{Local AppData}]\Temp</string>

    <string>{LocalAppDataLow}]</string>

    <string>{LocalAppDataLow}]\Microsoft\CryptnetUrlCache</string>

    <string>{Personal}]</string>

    <string>{Profile}]\Local Settings</string>

    <string>{Profile}]\NTUSER.DAT</string>

    <string>{Profile}]\NTUSER.DAT.LOG</string>

    <string>{Profile}]\NTUSER.DAT.LOG1</string>

    <string>{Profile}]\NTUSER.DAT.LOG2</string>

    <string>{ProgramFilesX64}]\Microsoft Application Virtualization\Sequencer</string>

    <string>{Recent}]</string>

    <string>{SystemX86}]\config</string>

    <string>{SystemX86}]\SMI</string>

    <string>{System}]\config</string>

    <string>{System}]\SMI</string>

    <string>{System}]\wbem</string>

    <string>{Windows}]\Debug</string>

    <string>{Windows}]\Logs\CBS</string>

    <string>{Windows}]\security</string>

    <string>{Windows}]\ServiceProfiles\LocalService</string>

    <string>{Windows}]\ServiceProfiles\NetworkService</string>

    <string>{Windows}]\Temp</string>

    <string>{Windows}]\WindowsUpdate.log</string>

    <string>{Windows}]\WinSxS\ManifestCache</string>

  </FileExclusions>

  <RegExclusions>

    <string>REGISTRY\MACHINE\SOFTWARE\Microsoft\Active Setup</string>

    <string>REGISTRY\MACHINE\SOFTWARE\Microsoft\AppV</string>

    <string>REGISTRY\MACHINE\SOFTWARE\Microsoft\Cryptography</string>

    <string>REGISTRY\MACHINE\SOFTWARE\Microsoft\Microsoft Antimalware</string>

    <string>REGISTRY\MACHINE\SOFTWARE\Microsoft\Microsoft Antimalware Setup</string>

    <string>REGISTRY\MACHINE\SOFTWARE\Microsoft\Microsoft Security Client</string>

    <string>REGISTRY\MACHINE\SOFTWARE\Microsoft\Reliability Analysis\RAC</string>

    <string>REGISTRY\MACHINE\SOFTWARE\Microsoft\SQMClient</string>

    <string>REGISTRY\MACHINE\SOFTWARE\Microsoft\Wbem</string>

    <string>REGISTRY\MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Notifications</string>

    <string>REGISTRY\MACHINE\SOFTWARE\Microsoft\Windows NT\CurrenVersion\SPP</string>

    <string>REGISTRY\MACHINE\SOFTWARE\Microsoft\Windows NT\CurrenVersion\SystemRestore</string>

    <string>REGISTRY\MACHINE\SOFTWARE\Policies\Microsoft\Microsoft Antimalware</string>

    <string>REGISTRY\MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender</string>

    <string>REGISTRY\MACHINE\SOFTWARE\Wow6432Node\Microsoft\Active Setup</string>

    <string>REGISTRY\MACHINE\SOFTWARE\Wow6432Node\Microsoft\AppV</string>

    <string>REGISTRY\MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography</string>

    <string>REGISTRY\MACHINE\SYSTEM\CurrentControlSet\services\VSS</string>

    <string>REGISTRY\USER\S-1-5-19\Software\Microsoft\SQMClient</string>

    <string>REGISTRY\USER\[{AppVCurrentUserSID}]\Software\Classes\Local Settings\ImmutableMuiCache</string>

    <string>REGISTRY\USER\[{AppVCurrentUserSID}]\Software\Microsoft\AppV</string>

    <string>REGISTRY\USER\[{AppVCurrentUserSID}]\Software\Microsoft\Windows\CurrentVersion\CloudStore</string>

    <string>REGISTRY\USER\[{AppVCurrentUserSID}]\Software\Microsoft\Windows\CurrentVersion\Explorer\SessionInfo\1\ApplicationViewManagement</string>

    <string>REGISTRY\USER\[{AppVCurrentUserSID}]\Software\Microsoft\Windows\CurrentVersion\Explorer\StreamMRU</string>

    <string>REGISTRY\USER\[{AppVCurrentUserSID}]\Software\Microsoft\Windows\CurrentVersion\Explorer\Streams</string>

    <string>REGISTRY\USER\[{AppVCurrentUserSID}]\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist</string>

    <string>REGISTRY\USER\[{AppVCurrentUserSID}]\Software\Microsoft\Windows\CurrentVersion\Internet Settings</string>

    <string>REGISTRY\USER\[{AppVCurrentUserSID}]\Software\Microsoft\Windows\CurrentVersion\Search</string>

    <string>REGISTRY\USER\[{AppVCurrentUserSID}]\Software\Microsoft\Windows\CurrentVersion\Security and Maintenance</string>

    <string>REGISTRY\USER\[{AppVCurrentUserSID}]\Software\Wow6432Node\Microsoft\AppV</string>

    <string>REGISTRY\USER\[{AppVCurrentUserSID}]\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\StreamMRU</string>

    <string>REGISTRY\USER\[{AppVCurrentUserSID}]\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\Streams</string>

    <string>REGISTRY\USER\[{AppVCurrentUserSID}]_CLASSES\Local Settings\MuiCache</string>

    <string>REGISTRY\USER\[{AppVCurrentUserSID}]_CLASSES\Local Settings\Software\Microsoft\Windows\Shell\BagMRU</string>

    <string>REGISTRY\USER\[{AppVCurrentUserSID}]_CLASSES\Local Settings\Software\Microsoft\Windows\Shell\Bags</string>

  </RegExclusions>

  <TargetOSes />

</SequencerTemplate>

 

Our final template is now currently like this:

Install Window 10
Username: admin

Install VC++
Newest to oldest
2017-2005

Add .NET 3.5: Copy sxs folder too c:\temp. Run DISM /Online /Enable-Feature /FeatureName:NetFx3 /All /LimitAccess /Source:C:\temp\sxs

Disable Windows Defender:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender
DisableAntiSpyware"=dword:00000001
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender\Real-Time Protection
DisableRealtimeMonitoring"=dword:00000001

 

Disable Windows 10 feature Upgrade:

HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\Windows\CurrentVersion\WindowsUpdate]
"AllowOSUpgrade "=dword:00000000
HKEY_LOCAL_MACHINE\SOFTWARE \Policies\Microsoft\Windows\WindowsUpdate]
"DisableOSUpgrade "=dword:00000001

- Disable Connected User Experiences and Telemetry (DiagTrack) service

- Disable Windows Search service
- Disable
Background transfer service

- Disable Offline Files service
- Disable
Delivery Optimization service

- Disable Diagnostic Policy Service 
- Disable Windows Update service (This is getting trickier now )
   Double click Windows Update service to open properties
   Click Stop to halt the service.
   Click the Log On tab
   Select Log on as: This account: .\Guest
   Leave password blank

   Click Apply

Turned of all notifications:

https://www.digitaltrends.com/computing/how-to-turn-off-notifications-in-windows-10/


Install ADK - Sequencer + Auto-Sequencer
Install PS module PassiveInstall
Install AppV Manage
Install ACE
Procmon and procexp

Uninstall OneDrive
Uninstall all removable apps

CPU: 1 Processor 2 cores
Memory: 8GB 
Network adapter: bridged
Disk: 120GB

Proxy enabled
Show hidden files
Show file extensions

Screen off: never
Hibernation: never

 

 

Hope this will be of help to someone other than us, we used much more time doing this stuff than I would have done if MS had preloaded and updated the template and documentation after Windows 7/8