Category: Tips

  • Cannot make my IMDB watchlist public?

    Each time I try to change my IMDB watchlist from “private” to “public”, it seems to be changed but comes back to “private” once I click on “Done”.

    This is a bug in the IMDB interface. There is fortunately a workaround: after changing the status of the list, add a movie in that list before clicking on “Done”.

    This bug is reported here.

    Loading

  • Connect a Logitech Elite Keyboard on a generic Bluetooth dongle

    I am still using the Logitech Elite Bluetooth Keyboard I bought years ago. It was sold in a bundle with a Bluetooth Optical Mouse MX900 and a Bluetooth Hub. That Hub also served as a cradle to charge the Mouse.

    Logitech Elite Keyboard And MX900 Mouse
    Logitech Elite Keyboard, MX900 Mouse and Bluetooth Hub

    Since I don’t user the Mouse anymore and don’t need therefore the Cradle to recharge it, I thought I could get rid of it if I could connect the Keyboard on a Generic Bluetooth dongle or even better: on my onboard Bluetooth.

    Click to Read More

    Actually, I don’t use the MX900 mouse anymore since the Cradle does not recharge it anymore. I think the “contacts” are dead. This seems to be a quite common issue.

    And since my Asus P9X79 Pro MB comes with an onboard Bluetooth, I thought that I could completely get rid of the Logitech Hub which has its own power supply, a usb connector and a PS/2 connector… i.e.: too many cables :/

    This is well supported by Logitech as explained in their Bluetooth FAQ. Here is how to proceed on Windows 8:

    1. The Bluetooth must already be installed. The default “drivers” (Bluetooth stack) from Microsoft will work fine.
    2. Right-click the Bluetooth icon in the system tray and select “Add a Bluetooth device.”
    3. Click “Add a device” on top of the Devices list.
    4. While the Wizard is searching for new devices press the “Connect” button behind the Keyboard (The small white button next to the battery compartment). A generic Keyboard will appear in the list. It will only be displayed as a Logitech Elite Keyboard once installed.
    5. Once the keyboard detected and added, Windows will prompt you to type a passkey on the Keyboard. You must end by pressing ‘Enter’ to validate the passkey.
    6. Now, you have to disallow Windows to turn off the Bluetooth while entering the sleep mode otherwise the Bluetooth keyboard will appear “Offline” when you wake up the computer.
      1. Right-Click the Bluetooth icon in the system stray and select “Open Settings”
      2. Open the “Hardware” tab in the “Bluetooth Settings” pane
      3. Select your Bluetooth dongle (or onboard emitter) and click on the “Properties” button to open the “Bluetooth Properties” pane
      4. Click on “Change settings”. You will see a new tab “Power Management”
      5. Open this “Power Management” tab and deselect “Allow the computer to turn off this device to save power”.
    7. The computer may have to be rebooted if the keyboard is not immediately enabled.

    The only drawback is that I won’t be able to use the keyboard at boot time (e.g.: to enter the bios) or in safe mode. To support that, the Logitech Bluetooth Hub came with a PS/2 connector.

    Loading

  • Fix Wi-Fi issue on Fuhu Nabi 2

    As I mentioned in a comment on this post, I was suddenly not able anymore to turn on the Wi-Fi of my Nabi 2. But it was easy to solve 🙂

    Click to Read More

    The situation when the problem occurred was this one:

    • My Nabi 2 is a UK version
    • The Product Version of my Nabi was 1.9.37 before rooting the device and installing the Gapps and it was still that version when the problem occurred.
    • I was using TWRP 2.2.2.1 as my Nabi 2 is suffering the Touch Screen Calibration issue with any next version.

    I have been reading many threads about that issue, mainly starting from this one. And I finally concluded that the only solution was to re-install the stock firmware, upgrade next to the latest Product Version and retry to root and install Gapps. It worked like a charm :p

    The easiest to do that is to use the Nabi Lab v2. It’s so well done and clear that the details provided here after are actually useless.

    1. If your PC is not ready (has the drivers) anymore to connect on the Nabi,  use first the menu 1.
    2. Use next the menu 3 to restore the stock firmware.
      • After this, my device was still running the Product Version 1.9.37 and all the original applications from Fuhu were back.
      • Most of the applications I installed from Google Play had disappeared but not all ?! I was expecting all of them to be swiped out…
    3. Reboot the device and go to the Settings > About tablet > Update to get the very latest Product Version.
      • In my case it moved from 1.9.37 to 2.0. I read somewhere that this one includes a fix or improvement related to Wi-Fi.. Good :p
    4. Back to Nabi Lab, use the menu 4 to root the device
      • I didn’t use the menu 1 to install TWRP, root the device and install Gapps because I wanted to keep the TWRP 2.2.2.1 proved to fit my Nabi regarding it’s Touch Screen Calibration issue.
    5. Finally, use the menu 3 to install Gapps.
    Et voilà. Wi-Fi is working and my Nabi is still rooted and has access to Google Play.
    Notice:
    • I did try to install TWRP 2.5.0.0 for Nabi 2 but I was still experiencing the Touch Screen Calibration Issue.
    • I did try also next “TWRP 2.3.3.0 for Nabi versions prior 1.9.37 (UK, …)” available with Nabi Lab v2 and it appeared to works fine on my Nabi! Great 🙂
    • What is still not great with the Nabi 2: there is no native support to move applications from internal to external SD. It’s well known that not all applications can be moved (Ex.: those with Widgets currently in use, …). But they could offer something to move the others like use of “simlinks” for each moved .apk..

    Loading

  • IE requests the root “/” of the website at the same time as any other page

    I have been reported that for 5 customers out of 10000, each time their Internet Explorer does GET a page (including a simple **blank** html page), it also requests next the root “/” of the website (i.e.: the “homepage”). This has been making me going nuts.

    Click to Read More

    This problem occurs when browsing any page of any site on internet as well as any page in any one of our business sites. So, it is absolutely not related the well known issues such as an image with an empty “src”, the use of the “base” tag, … Also, it occurs only when browsing with IE and not with Chrome, Firefox, …

    This is a major issue as far as our business sites are concerned as the first call to any page of our sites is consuming an authentication “ticket”. Once this ticket is consumed, it is not available anymore for subsequent calls made within the same session. And because it happens that the ticket is consumed by the call to the root instead of the call to the page actually browsed, the business applications sometimes fail.

    I already experienced such a weird behavior with Add-Ons aimed at “page rating”, “survey”, … Such Add-Ons are not always considered as “malwares” and therefore not reported by antivirus, etc..

    Unfortunately, the faulty PCs (where the problem occurs) do no have any such Add-Ons. They are also 100% “malware free”… Using TCPView from SysInternals, we have confirmed that the unwanted GET is done by IE and not by another process. Using WireShark, we have also confirmed that this GET is not done by IE due to an “http 302” (redirect) or any other similar reasons, that there is no suspicious proxy used during the communication, etc….

    Using Process Explorer, we have listed all the dlls loaded by IE both on a “faulty” PC and on a “normal” PC (where the problem does not occur). The purpose was to detect possible “third party” dll. But they all appeared to be from Microsoft. We noticed however one dll loaded on the faulty PC which was not reported on the “normal” PC: msrating.dll,  the interal “Internet Ratings and Local User Management” dll from Microsoft.

    Tilt! The purpose of this one sounds like the Add-Ons I mentioned above…

    As this dll is loaded by the IE’s “Content Advisor”, I have disabled this feature via “Tools-> Internet Options-> Content Tab” and the problem is now gone from all faulty PCs! Gotcha :p

    Also,  If I enable the “Content Advisor” on a “normal” PC, the problem occurs there too… confirming that this feature is the culprit.

    Finally, note that the access to the “Content Advisor” was protected by a user password  on one of the “faulty” PC and I had to hack it as explained here: http://www.wikihow.com/Remove-Content-Advisor-Password-in-Internet-Explorer.

    Loading

  • Laptop’s Wi-Fi off after Windows 8 Update

    My  laptop Sony Vaio VGN CR31 has just rebooted after a Windows Update. Before the reboot, I was still browsing internet via the wifi connection. But after the reboot, the WiFi was OFF(*) although the WiFi switch (on the left side of the latop) was ON.

    (*)  In the network connection panel, the Wi-Fi was showing “Wi-Fi (Off)”.

    I did run the Windows troubleshooting on the internet connection and network adapter.  All drivers were up to date and no issue were found.

    After various attempt to uninstall the latest updates, I found the solution:

    • Press :win: + C  to open Windows 8 Charms menu
    • Choose “Settings”,
    • Click “Change PC Settings” at the bottom.
    • Choose the “Wireless” section. There, you can see two (or three) toggles: Airplane Mode, Wireless Devicess (and possibly Bluetooth).

    Wi-Fi was also turned OFF! Toggling Wi-Fi back ON fixed my issue. No idea why the Windows Updates (or the reboot or ???) did change that settings ?!

    Loading

  • Remove Print Jobs stuck in Queue with state Deleting

    I have time to time Print Jobs stuck in the Print Queue that cannot be canceled or deleted. It’s always very frustrating as it blocks other Print Jobs which are usually quite urgent… The only solution is to stop the spooler and delete its content from a command prompt.

    Click to Read More

    Often, it starts with a Job stuck in the Print Queue and not printing. For some reason, although I restart both the PC and the Printer, the Job never starts. So, I try to cancel it but the Job does not disappear from the Queue and keeps displaying the status “Deleting-Printing…” for ever.

    I think that the problem occurs when the PC goes into the Sleep state while the Print Job is not yet completed (But I am quite sure there are other causes). When the PC is waked up, the Job appears stuck for ever.

    Here are the commands  to stop, clean and restart the spooler:

    [bash]net stop spooler
    del %systemroot%\system32\spool\printers\*.shd
    del %systemroot%\system32\spool\printers\*.spl
    net start spooler[/bash]

    Loading

  • Status of FlexRAID Jobs currently running

    While you manually trigger a FlexRAID job using the client FlexRAIDcmd.exe or when a FlexRAID Scheduled Job is started, its status is not displayed automatically in the Web UI currently opened.

    Click to Read More

    The Web UI needs to be reloaded in the Browser (Ctrl + F5). Doing so,

    • A status windows should now be displayed for the current process and
    • The job should also now appear in the “Command Execution Center” (FlexRAID UI > Your Configuration > Tool Box).
      • In that “Command Execution Center”, the “Pause”, “Resume” and “Abort” buttons should now be accessible.
    To get the status of the current job, using the FlexRAID client (FlexRAIDcmd.exe), type in a command prompt: [ps]FlexRAIDcmd.exe localhost – – status[/ps]

    Loading

  • WCF Services – The request failed with HTTP status 405: Method Not Allowed.

    This error occurred while testing WCF services moved from old Windows Servers 2003 on some of our new Windows Server 2008 R2 with IIS 7.5 (not on all). It appeared that depending on the setup sequence, .Net features were not all correctly configured, a.o. the .svc handlers…

    Click to Read More

    Here is the commands to be used in order to fix the setup:

    [bash]

    “C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet_regiis.exe” -i -enable
    “C:\Windows\Microsoft.NET\Framework64\v3.0\Windows Communication Foundation\servicemodelreg.exe” -i
    “C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe” -i -enable
    “C:\Windows\Microsoft.NET\Framework64\v4.0.30319\servicemodelreg.exe” -ia

    [/bash]

    Loading

  • Use FlexRAIDCmd within PowerShell scripts to gracefully stop FlexRAID

    When using FlexRAID in Real-Time mode, the Pool must be stopped before stopping the service, i.e., also before shutting down the server. The best approach is to define a Shutdown Task in Windows to manage this…

    Click to Read More

    The Shutdown Task will run a Powershell Script using the FlexRaidClient to query the state of FlexRAID and trigger actions…

    The FlexRaidClient for windows, named FlexRaidCmd.exe, is not installed by default with the service. It must be downloaded as an Option here.

    The syntax is: FlexRAIDClient Host Port Timeout Command

    Once installed, one can use the Command “view” in a cmd prompt RUN AS Administrator on the server to Start/Stop the pool:

    FlexRAIDCMD localhost - - view class1_0 start
    FlexRAIDCMD localhost - - view class1_0 stop

    The – –  are used as “default values” for the Port and Timeout parameters
    class1_0 must be used for the new driver (=> class1) and to access the first pool (=> ID = 0).

    Starting the pool takes about ~50 seconds.
    Stopping the pool takes less than 10 seconds.

    If the command fails due to a syntax error, the error message can be found in the file log.log
    If the command succeed, there is nothing logged at all in the log file but a message displayed in the console (cmd prompt)

    Quote

    {“success”: true, “status”: null, “commandMessages”: [{“messageCode”: “successStoragePoolStarted”, “messageData”: [“V”]}], “serverMessages”: null}
    => Le pool de stockage est bien démarré pour le volume: V:…

    Notice: In a normal cmd prompt (not run as admin), the command returns an error due to an access denied on the log file:

    Quote

    log4j:ERROR setFile(null,true) call failed.
    java.io.FileNotFoundException: log.log

    Notice: if the Web UI was open before executing a Start/Stop, it must be reopened (or refreshed: CTRL-F5) otherwise it does not display the new state of the pool.

    Regarding the log.log file, this one has better be located in a fix location. Edit the file log4j.properties and set a path like:

    log4j.appender.default.File=C:/FlexRaid/FlexRAIDCmd.log

    Pay attention to the path separator! It’s not the one used by Windows but the one used in Java!

    To shutdown the FlexRaid server after stopping the pool, use the command shutdown-server.

    FlexRaid localhost - - shutdown-server

    If the pool is still running, we get the following response:

    Quote

    {“success”: false, “status”: null, “commandMessages”: [{“messageCode”: “errorShutdownNotAllowedStoragePoolServiceRunning”, “messageData”: []}], serverMessages”: null}
    => Pour pouvoir arrêter le service “host”, le service de pool de stockage doit être arrêté!

    If the service stops successfully, we get :

    Quote

    {“success”: true, “status”: null, “commandMessages”: [{“messageCode”: “successServerShutingDown”, “messageData”: []}], “serverMessages”: null}
    => Arrêt du serveur en cours…

    To restart the service, we can use:

    net start "FlexRaid"

    Notice: I didn’t find yet on the forum the difference between ‘FlexRaid localhost – – shutdown-server’ and ‘net stop “FlexRaid’. To my knowledge ‘net stop’ is synchronous and therefore maybe preferred to stop the service properly before shutting down ?! (FlexRaid message seems to indicate it’s asynchronous)

    Notice: If I run “FlexRaid localhost — shutdown-server” while the service is not running, I get obviously an exception “Connection refused: connect : ConnectException” but also this message in the log file (log.log):

    Quote

    ERROR: Unexpected character (‘A’ (code 65)): expected a valid value (number, String, array, object, ‘true’, ‘false’ or ‘null’)
    at [Source: java.io.StringReader@2f3d698; line: 1, column: 2] org.codehaus.jackson.JsonParseException: Unexpected character (‘A’ (code 65)): expected a valid value (number, String, array, object, ‘true’, ‘false’ or ‘null’)
    at [Source: java.io.StringReader@2f3d698; line: 1, column: 2]

    Now, here is how to create a “shutdown task” in the Local Group Policies of a Windows Server 2012:

    1) Enable script execution on the server
    a) On the Start Screen right-click the Windows PowerShell tile and run it As Administrator
    b) execute “Set-ExecutionPolicy RemoteSigned” in that shell and answer “Y”

    2) Create the script
    a) Create a file “StopFlexRaid.ps1” in your “FlexRaid Client” folder (e.g.).
    b) Type the script found bellow in the file (change the path to FlexRaidCmd)

    3) Use the script as Shutdown Script
    a) On the Start Screen, type “gpedit.msc” and run it.
    b) Go to the node “Computer Configuration\Windows Settings\Scripts (Startup/Shutdown)”.
    c)  Edit “Shutdown” and in the tab “PowerShell script”, “Add” StopFlexRaid.ps1

    Notice:
    – Shutdown scripts are run as Local System, and they have the full rights that are associated with being able to run as Local System.
    – Shutdown scripts are run synchronously. The Server should wait on the script before shutting down.

    Here is the StopFlexRaid script:

    [ps]

    $srvName = "FlexRAID"
    $flexCmd = "C:\Program Files (x86)\FlexRAID 2.0 Client\FlexRAIDCMD.exe"
    $servicePrior = Get-Service $srvName
    #"$srvName is currently " + $servicePrior.status

    function ExitWithCode
    {
    param
    (
    $exitcode
    )
    "Exit with code $exitcode"
    #$host.SetShouldExit($exitcode)
    #exit
    }

    $flexCmd = "C:\Program Files (x86)\FlexRAID 2.0 Client\FlexRAIDCMD.exe"

    function ExecuteFRCmd([string]$cmd, [string]$hostname="localhost", [string]$port="-", [string]$timeout="-")
    {
    $error.clear()

    $pinfo = New-Object System.Diagnostics.ProcessStartInfo
    $pinfo.FileName = $flexCmd
    $pinfo.RedirectStandardError = $true
    $pinfo.RedirectStandardOutput = $true
    $pinfo.UseShellExecute = $false
    $pinfo.Arguments = "$hostname $port $timeout $cmd"
    $p = New-Object System.Diagnostics.Process
    $p.StartInfo = $pinfo
    $p.Start() | Out-Null
    $p.WaitForExit()
    $output = $p.StandardOutput.ReadToEnd()

    if ( $error.count -eq 0)
    {
    # Clean the JSON message (remove the trailing text (=> blabla))
    $output = $output -replace ‘(?<First>.*)=>.+’, ‘${First}’
    }
    else
    {
    $output = $null
    }

    return $output
    }

    function IsAnyTaskRunning()
    {
    $running = $FALSE

    $state = ExecuteFRCmd("status")

    if ($state -eq $null)
    {
    throw "Command failed to execute"
    }
    else
    {
    #Write-Host "States: $state"

    $process = $state | ConvertFrom-Json

    $message = $process.commandMessages.messageCode
    if ($message -eq "successNoProcessSinceServerStartup")
    {
    #Write-Host "No Process started since Server startup"
    }
    else
    {
    $processID = $process.status.referenceCode

    do {
    $state = ExecuteFRCmd("status "+$processID)
    $process = $state | ConvertFrom-Json

    switch ($process.status.status)
    {
    { @("STATUS_STARTED", "STATUS_PROCESSING", "STATUS_PAUSING", "STATUS_RESUMED", "STATUS_RESUMING") -contains $_ }
    {
    #Write-Host task $processID – $process.status.task – is running
    $running = $TRUE
    }
    { @("STATUS_COMPLETED", "STATUS_ABORTED", "STATUS_ABORTING", "STATUS_PAUSED") -contains $_ }
    {
    #Write-Host task $processID – $process.status.task – is not running
    }
    }

    $processID -=1
    } while (($processID -gt 0) -and ($running -eq $FALSE))
    }
    }

    return $running
    }

    Write-Eventlog -Logname ‘Application’ -source ‘FlexRAID’ -eventID 1 -EntryType Warning -Category 0 -message "Graceful FlexRAID Shutdown triggered"

    $wid = [System.Security.Principal.WindowsIdentity]::GetCurrent()
    $prp = new-object System.Security.Principal.WindowsPrincipal($wid)
    $adm = [System.Security.Principal.WindowsBuiltInRole]::Administrator
    $IsAdmin = $prp.IsInRole($adm)
    if (-not $IsAdmin) {
    write-host "Current powershell process is not running with Administrator privileges"

    $message = "Graceful FlexRAID Shutdown not running with adhoc rights…"
    Write-Eventlog -Logname ‘Application’ -source ‘FlexRAID’ -eventID 1 -EntryType Error -Category 0 -message $message
    cmd /c shutdown -a
    ExitWithCode -exitcode 2
    }
    elseif ($servicePrior.status -eq "Stopped")
    {
    "$srvName is already " + $servicePrior.status
    }
    elseif ($servicePrior.status -ne "Running")
    {
    "$srvName is not Running but " + $servicePrior.status
    }
    else
    {
    $running = IsAnyTaskRunning
    if ($running -eq $TRUE)
    {
    $message = "FlexRAID process(es) still running and preventing Server to shutdown…"
    $message
    Write-Eventlog -Logname ‘Application’ -source ‘FlexRAID’ -eventID 1 -EntryType Error -Category 0 -message $message
    cmd /c shutdown -a
    ExitWithCode -exitcode 2
    }
    else
    {
    "Wait on the Storage Pool to stop. This can take a few seconds."

    $state = ExecuteFRCmd("view class1_0 stop")

    $state
    $abort = "False"

    if ( $state -eq $null)
    {
    "Storage Pool failed to stop"
    $error[0] $message = "FlexRaid Storage Pool failed to stop and is preventing Server to shutdown: " + $error[0] $message
    Write-Eventlog -Logname ‘Application’ -source ‘FlexRAID’ -eventID 1 -EntryType Error -Category 0 -message $message
    cmd /c shutdown -a
    ExitWithCode -exitcode 2
    }
    else
    {
    $process = $state | ConvertFrom-Json

    $message = $process.commandMessages.messageCode
    if ($message -eq "successStoragePoolStopped")
    {
    "Storage Pool successfuly stopped"
    Write-Eventlog -Logname ‘Application’ -source ‘FlexRAID’ -eventID 1 -EntryType Warning -Category 0 -message "Storage Pool stopped before shutting down"
    }
    else
    {
    if ($message -eq "errorNoActiveStoratePool")
    {
    "Storage Pool actually not started"
    }
    else
    {
    $abort = "True"
    $event = "FlexRaid Storage Pool failed to stop, preventing Server to shutdown: " + $state
    $event
    Write-Eventlog -Logname ‘Application’ -source ‘FlexRAID’ -eventID 1 -EntryType Error -Category 0 -message $event
    cmd /c shutdown -a
    ExitWithCode -exitcode 3
    }
    }

    if ($abort -eq "False")
    {
    $error.clear()
    Stop-Service $srvName
    if ( $error.count -eq 0)
    {
    Write-Host -NoNewLine "Waiting on $srvName to stop "
    $timeout = new-timespan -Minutes 1
    $sw = [diagnostics.stopwatch]::StartNew()
    while (((Get-Service $srvName).status -ne "Stopped") -and ($sw.elapsed -lt $timeout))
    {
    Write-Host -NoNewLine "."
    sleep 1
    }
    "."
    }

    $serviceAfter = Get-Service $srvName
    if ($serviceAfter.status -eq "Stopped")
    {
    "$srvName is now " + $serviceAfter.status
    ExitWithCode -exitcode 0
    }
    else
    {
    "$srvName failed to stop. It is now " + $serviceAfter.status
    ExitWithCode -exitcode 1
    }
    }
    }
    }
    }[/ps]

    Here is the code to start FlexRaid, useful while testing.

    [ps]

    $srvName = "FlexRAID"
    $flexCmd = "C:\Program Files (x86)\FlexRAID 2.0 Client\FlexRAIDCMD.exe"
    $servicePrior = Get-Service $srvName
    #"$srvName is currently " + $servicePrior.status

    function ExitWithCode
    {
    param
    (
    $exitcode
    )
    "Exit with code $exitcode"
    #$host.SetShouldExit($exitcode)
    #exit
    }

    if ( ($servicePrior.status -ne "Stopped") -and ($servicePrior.status -ne "Running"))
    {
    "$srvName is not Stopped but " + $servicePrior.status
    }
    else
    {
    if ($servicePrior.status -eq "Running")
    {
    "$srvName is already " + $servicePrior.status
    }
    else
    {
    Start-Service $srvName

    Write-Host -NoNewLine "Waiting on $srvName to start "
    $timeout = new-timespan -Minutes 1
    $sw = [diagnostics.stopwatch]::StartNew()
    while (((Get-Service $srvName).status -ne "Running") -and ($sw.elapsed -lt $timeout))
    {
    Write-Host -NoNewLine "."
    sleep 1
    }
    "."
    }

    $serviceAfter = Get-Service $srvName
    if ($serviceAfter.status -eq "Running")
    {
    "$srvName is now " + $serviceAfter.status

    $error.clear()
    "Wait on the Storage Pool to start. This can take a while."
    $stopPool = Start-Process $flexCmd -ArgumentList "localhost – – view class1_0 start" -NoNewWindow -Wait -PassThru

    if ( $error.count -eq 0)
    {
    ExitWithCode -exitcode 0
    }
    else
    {
    "Storage Pool failed to start"
    $error[0] ExitWithCode -exitcode 2
    }
    }
    else
    {
    "$srvName failed to start. It is now " + $serviceAfter.status
    ExitWithCode -exitcode 1
    }
    }

    [/ps]

    Loading

  • Change Windows Product Key before activation

    Here is two command lines to change a Windows product key (Vista,  7 or  8) and activate Windows. They must be executed in a Command Prompt “Run As Administrator”.

    1. To set a product key, run “slmgr.vbs -ipk <your product key>”
      • Ex.: slmgr.vbs -ipk 00000-00000-00000-00000-00000
    2. To activate windows after changing the key, run “slmgr.vbs -ato”

    Loading