Posts Tagged ‘Windows’

Recently one of my computers had an issue with the Windows Explorer. It was crashing constantly when I try to click, right click or hover on a Zip file. When the Windows Explorer crashes, it will log an event as below.

After bit of checking, found this was due to BIB.DLL which is located by default in C:\Program Files\Common Files\Adobe\Adobe Drive CS4. The way to stop this from occurring is by removing all CS4 Drive Context Menu entries from Registry.

If you do not want Adobe CS4 you can uninstall that, otherwise you need to remove some CS4 related entries from registry.

I searched for the GUID “C95FFEAE-A32E-4122-A5C4-49B5BFB69795” of Adobe Drive ADFS Menu using RegEdit and deleting the below 3 context menu entries fixed the issue for me.

HKEY_CLASSES_ROOT\Drive\shellex\ContextMenuHandlers\{C95FFEAE-A32E-4122-A5C4-49B5BFB69795}

HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\{C95FFEAE-A32E-4122-A5C4-49B5BFB69795}

HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers\{C95FFEAE-A32E-4122-A5C4-49B5BFB69795}

Advertisement

Recently I encountered an error while trying to install a fresh copy of Windows 11 64 bit on a virtual machine running on a Windows 11 host machine. 

Even though the Virtual Machine (VM) is meeting all the requirements Windows setup was complaining that PC is not meeting the minimum requirements as below.

This is happening because TPM (Trusted Platform Module) is not enabled when you created VMs in VMWare Player. I managed to make it work by changing the VMX file which stores the VMs configuration information.

Follow below steps,

1. Turn off the Virtual PC (VPC).
2. Browse to the location where the VPC files are stored.

    You can find the location by opening the VPC settings as seen below.

3. In that location you will see a file named “VM Name.vmx”, in mine it was “Windows 10.vmx”. Open this file using NotePad.

4. Add the below line to the file.

    managedVM.autoAddVTPM = “software”

5. Save the file and start the VPC. Now you should be able to continue with the installation.

Visit Microsoft to find full Windows 11 requirements.

It seems in Windows Server latest versions the good old disk clean up tool is not enabled by default. If you just want it back you can run the below commands in a command prompt to copy the required files.

Copy C:\Windows\winsxs\amd64_microsoft-windows-cleanmgr_31bf3856ad364e35_6.1.7600.16385_none_c9392808773cd7da\cleanmgr.exe C:\Windows\System32\

Copy C:\Windows\winsxs\amd64_microsoft-windows-cleanmgr.resources_31bf3856ad364e35_6.1.7600.16385_en-us_b9cb6194b257cc63\cleanmgr.exe.mui C:\Windows\System32\en-US\

Then create a shortcut pointing to the Disk Clean up tool found in the following path.

C:\Windows\System32\CleanMgr.exe

I did try this on Windows Server 2008 R2 and hope it works as it is or with slight changes on other versions of Windows as well.

You can remove simple partitions by using the Computer Management tool found in Windows. Search for it on the Start menu to launch it.

But if it is a protected partition you will need to use the tool DiskPart. In the Start menu type Cmd or Command Prompt to open a command prompt. Then type DiskPart, it is a powerful utility which can even work on protected volumes.

To delete one partition, follow the steps.

1. List all disks by using the command List Disk.

2. Select the disk by using Select Disk x command.

3. You can confirm the disk by listing all the partitions on it by using the command List Partition.

4. Select the partition by using the command, Select Partition x command.

5. Delete the partition by command Delete Partition Override.

Override parameter needs to be passed if the partition is not a simple data partition.

You can confirm the deletion by re-listing the partitions on the disk by List Partition command.

image_thumb[15]

With the unavailability of Windows Live Writer for newer versions of Windows, a good replacement for it is Open Live Writer. It is a open source application which enables you to create, edit and publish blog posts. Since the code is based on the Windows Live Writer, it looks and behaves the same so whoever used Windows Live Writer will find it easy to use.

It can be downloaded using the Open Live Writer web site.

You will be able to find plugins to use with the writer. If you are needing to post source code you can try the Code Plugin by Rich Hewlett.

image

Recently I was interested in finding a way to monitor a windows service. What I needed was to check whether the service is running and if not running get a notification and try to restart the service. Following PowerShell script does exactly that, it checks for Microsoft CRM Asynchronous Service and the Microsoft CRM Asynchronous Maintenance Service activity and send 2 emails to Admin and Dev. This needs to be then scheduled using Windows Task Scheduler or SQL Server Job.

### Checking for CRM Async and Maintenance service failure and try restarting, if failing send an email notification.

 

## Function to send mail notification.

function Send_Email ([string]$strEmailSubject, [string]$strEmailBody)

{

       $EmailFrom = "Arjuna@Email.com"

       $EmailTo = "Admin@Email.com, Dev@Email.com"

       $EmailSubject = $strEmailSubject

       $EmailBody = $strEmailBody

       $EmailSMTPServer = "SMTP.server.com"

       ## Creating Mail Message object.

       $SMTPMessage = New-Object System.Net.Mail.MailMessage $EmailFrom, $EmailTo, $EmailSubject, $EmailBody

       ## Enabling HTML mail body.

       $SMTPMessage.IsBodyHtml = $true

       ## Creating SMTP client object.

       $SMTPClient = New-Object System.Net.Mail.SMTPClient $EmailSMTPServer

       ## Sending mail.

       $SMTPClient.Send($SMTPMessage)

       ## Sending mail method 2.

       ##send-mailmessage -from "Arjuna@Email.com" -to "Admin@Email.com, Dev@Email.com" -subject "CRM Async Service Failed" -body "Please check." -smtpserver "SMTP.server.com"

       ## Sending mail method 2 using parameters.

       ##send-mailmessage -from $EmailFrom -to $EmailTo -subject $EmailSubject -body $EmailBody -smtpserver $EmailSMTPServer

}

 

## Function to check the service activity.

function Check_Service

{

       ## Get all services which has a Name like MSCRMAsyncService, Start Mode is Auto and service State is Running.

       $FailedAsyncService = Get-WmiObject Win32_Service | Where-Object {$_.Name -like ‘MSCRMAsyncService’ -and $_.StartMode -eq ‘Auto’ -and $_.State -ne ‘Running’} | Select-Object DisplayName

       ## For Testing.

       ##Write-Host "A: " $FailedAsyncService

 

       ## Get all services which has a Name like MSCRMAsyncService$maintenance, Start Mode is Auto and service State is Running.

       $FailedAsyncMainteService = Get-WmiObject Win32_Service | Where-Object {$_.Name -like ‘MSCRMAsyncService$maintenance’ -and $_.StartMode -eq ‘Auto’ -and $_.State -ne ‘Running’} | Select-Object DisplayName

       ## For Testing.

       ##Write-Host "B: " $FailedAsyncMainteService

 

       ## Checking whether the Async Service has failed.

       if ($FailedAsyncService -ne $NULL)

       {

              ## Trying to start the failed Async Service.

              Start-Service -displayname "Microsoft Dynamics CRM Asynchronous Processing Service"

              ## Service Name can also be used to start the servie.

              ##Start-Service MSCRMAsyncService

              ## Get all services which has a Name like MSCRMAsyncService, Start Mode is Auto and service State is Running.

              $AsyncServiceStarted = Get-WmiObject Win32_Service | Where-Object {$_.Name -like ‘MSCRMAsyncService’ -and $_.StartMode -eq ‘Auto’ -and $_.State -ne ‘Running’} | Select-Object Name

              ## Checking the service to see whether it started.

              if ($AsyncServiceStarted -ne $NULL)

              {

                     ## Calling Send_Mail function to notify.

                     Send_Email ("CRM Async Service Failed.") ("System has detected that the following CRM Async Service has failed. System automatically tried restarting the service but it was unsuccessful. Try manual start. <BR/><BR/>" + $FailedAsyncService)

              }

              else

              {

                     ## Calling Send_Mail function to notify.

                     Send_Email ("CRM Async Service Restarted.") ("System has detected that the following CRM Async Service has failed. System automatically tried restarting the service and it was successful. <BR/><BR/>" + $FailedAsyncService)

              }

       }

 

       ## Checking whether the Async Maintenance Service has failed.

       if ($FailedAsyncMainteService -ne $NULL)

       {

              ## Trying to start the failed Async Maintenance Service.

              Start-Service -displayname "Microsoft Dynamics CRM Asynchronous Processing Service (maintenance)"

              ## Get all services which has a Name like MSCRMAsyncService$maintenance, Start Mode is Auto and service State is Running.

              $AsyncMainteServiceStarted = Get-WmiObject Win32_Service | Where-Object {$_.Name -like ‘MSCRMAsyncService$maintenance’ -and $_.StartMode -eq ‘Auto’ -and $_.State -ne ‘Running’} | Select-Object Name

              ## Checking the service to see whether it started.

              if ($AsyncMainteServiceStarted -ne $NULL)

              {

                     ## Calling Send_Mail function to notify.

                     Send_Email ("CRM Async Service Failed.") ("System has detected that the following CRM Async Service has failed. System automatically tried restarting the service but it was unsuccessful. Try manual start. <BR/><BR/>" + $FailedAsyncMainteService)

              }

              else

              {

                     ## Calling Send_Mail function to notify.

                     Send_Email ("CRM Async Service Restarted.") ("System has detected that the following CRM Async Service has failed. System automatically tried restarting the service and it was successful. <BR/><BR/>" + $FailedAsyncMainteService)

              }

       }

}

 

## Calling the Check_Service function.

Check_Service

As you may be knowing, you can use Windows PowerShell to change registry values. In this article I am going to do five things.

I have created few registry entries to use in this example as seen below. In real world you can use whatever entries in your registry. It is always advisable to backup your registry before changing it.

clip_image002[13]

1. Set a registry key value.

To set a value you need to use the “Set-ItemProperty” cmdlet as below.

Set-ItemProperty -Path "HKLM:\Software\Test\Live" -Name "TestValue2" –Value “TestData2”

Above command will put “TestData2” in the registry key “TestValue2” located in HKEY_LOCAL_MACHINE\Software\Test\Live.

2. Read a registry key value.

Reading from the registry can be done by using the cmdlet “Get-ItemProperty”.

Below command will get the value in the “TestValue1” key.

Get-ItemProperty -Path "HKLM:\Software\Test\Live" -Name "TestValue1"

3. Using variables in PowerShell.

Here I am going to read a registry key value and put it to another registry key. This can be done using a variable. First you need to read the value into a variable using the “Get-ItemProperty” cmdlet and that value can be saved using the “Set-ItemProperty” cmdlet.

  1. # Check for the existance of the registry key.
  2. IF (Get-ItemProperty -Path “HKLM:\Software\Test\Live” -Name “TestValue1” -ea 0)
  3. {
  4.     # Fetching the value from TestValue1.
  5.     $OldValue = Get-ItemProperty -Path “HKLM:\Software\Test\Live” -Name “TestValue1”
  6. }
  7. ELSE
  8. {
  9. # Inserting a blank, if the registry key is not present.
  10.     $OldValue = “”
  11. }
  12. # Printing the value in the variable.
  13. Write-Host $OldValue.TestValue1
  14. # Setting the value to TestValue2.
  15. Set-ItemProperty -Path “HKLM:\Software\Test\Live” -Name “TestValue2” -Value $OldValue.TestValue1

4. Working with registry keys with spaces.

In case your registry keys contain spaces, you need to use double quotes in your script as seen below.

  1. # Check for the existance of the registry key.
  2. IF (Get-ItemProperty -Path “HKLM:\Software\Test\Live” -Name “Test Value 1” -ea 0)
  3. {
  4.     # Fetching the value from Test Value 1.
  5.     $OldValue = Get-ItemProperty -Path “HKLM:\Software\Test\Live” -Name “Test Value 1”
  6. }
  7. ELSE
  8. {
  9.     # Inserting a blank, if the registry key is not present.
  10.     $OldValue = “”
  11. }
  12. # Printing the value in the variable.
  13. Write-Host $OldValue.“Test Value 1”
  14. # Setting the value to Test Value 2.
  15. Set-ItemProperty -Path “HKLM:\Software\Test\Live” -Name “Test Value 2” -Value $OldValue.“Test Value 1”

 

5. Saving PowerShell commands as scripts and running them.

Both above can be saved as a PowerShell script by saving it in a file with the extension ps1. For example I did save it as “ChangeReg.ps1” in my C drive inside the folder “new”. Then the script can be run by browsing to the folder and using the command “.\ChangeReg.ps1”.

clip_image002[10]

After the script is run my registry keys looked like this.

clip_image002[3]

In case you need to retrieve values from other registry hives (locations), following table may be helpful.

 

Registry Hive

Abbreviation

1. HKEY_CLASSES_ROOT HKCR
2. HKEY_CURRENT-USER HKCU
3. HKEY_LOCAL_MACHINE HKLM
4. HKEY_USERS HKU
5. HKEY_CURRENT_CONFIG HKCC

 

In case you need to read more on “Get-ItemProperty” and “Set-ItemProperty”, use the links to visit official documentation from Microsoft TechNet.

Resetting Windows XP Mode

Posted: November 1, 2013 in Windows
Tags: , ,

Recently I had a problem using Windows XP mode simply because the password for Windows XP mode was not working.This can happen when Windows XP mode password was changed in Windows XP Mode or when the Windows XP Mode was created from another user account to the one currently logged into the physical machine.

One way to fix this is by opening Windows XP Mode Windows Virtual PC Settings and deleting saved credentials. But in my case there were no saved credentials so my button was disabled.

clip_image002

Second way to fix this is by uninstalling Windows XP Mode and reinstalling it.

Third way is a quicker way to do this by simply cleaning the virtual machine files in folder “C:\Users\Administrator\AppData\Local\Microsoft\Windows Virtual PC\Virtual Machines”. Make sure you are only deleting the files relevant to Windows XP Mode.

clip_image002[5]

Then when you relaunch Windows XP mode, it will say that some of the required files are missing and will prompt to create a new environment. When you press “Create New” it will start the wizard to create a brand new Windows XP Mode.

clip_image001

If it generates any errors, you should try deleting the virtual machine file found in “<User Folder>\Virtual Machines”

clip_image002[7]

After finishing the wizard you will get a new Windows XP Mode.

clip_image001[5]clip_image001[7]

clip_image001[21]clip_image001[19]clip_image002[9]clip_image002[14]

If you are using Windows, following are some handy shortcut keys with their actions to make your life bit easy.

Key Combination

Action

Windows Key + E

Opens Windows Explorer

Windows Key + L

Locks Windows

Windows Key + F

Open Search

Windows Key + R

Open Run Window

Windows Key + D

Minimise / Restore All Applications

Windows Key + Space

Peek to Desktop

Windows Key + Home

Minimise all Applications except the current Application

Shift + F10

Right Click

Windows Key + Number Keys from 1 – 9

Activate / Show Application on Taskbar.

Windows Key + Right Arrow

Switch between different Application Layouts

Windows Key + Down Arrow

Minimize an Application

Windows Key + Up Arrow

Maximize Application

Windows Key + Shift + Up Arrow

Fit Application height to screen height

Windows Key + Shift + Right / Left Arrow

Move Applications among the connected Displays when having multiple displays.

In an Application Alt + F4

Closes the Application

At Desktop Alt + F4

Brings Shutdown Window

 

I did find these in Windows 7, but have not yet tested on other versions of Windows.

 

If you wanted to lock your Windows using a batch file it can be achieved using the following command.

rundll32.exe user32.dll, LockWorkStation

This will be handy if you need to lock your computer after a certain scheduled action. Simply place this in a bat file, and schedule the bat file to be run to get the computer locked.

I tried this on Windows 7.