Open-Shell / Open-Shell-Menu

Classic Shell Reborn.
MIT License
6.97k stars 434 forks source link

Get Classic Start working on Hyper-V Server #44

Open FaberfoX opened 6 years ago

FaberfoX commented 6 years ago

Right now, I'm running Cairo Desktop and Explorer++ on a Hyper-V Server 2016. Classic start installs, runs (according to task manager) but is nowhere to be found. Would it be posible to make it work?

Ibuprophen commented 6 years ago

The software doesn't require an executable launch from the individual.

After it installs, just select the start button (or press the windows key on the keyboard) and you should see it.

~Ibuprophen

FaberfoX commented 6 years ago

Hyper-V Server is like a Windows Server Core install, there's no start menu, no explorer.exe, no control panel, not even a desktop. Hyper-V is a free product, designed to compete with ESXi from vmware, and you are supposed to manage it via Powershell or remotely using RSAT or the newly launched Windows Admin Center. Having a functional desktop/start menu on it would be great for quick tasks. I tried pressing the windows key, nothing happens. Settings don't launch either. You can download and install it from here: https://www.microsoft.com/en-us/evalcenter/evaluate-hyper-v-server-2016

Ibuprophen commented 6 years ago

Is the Classic Start even compatible with Hyper-V if it doesn't even have a start menu to replace?

Any thoughts @coddec and @XenHat?

For Classic Start to work for the Hyper-V, i would think that it would require a completely separate installer with the remaining software, files, etc... implemented for it to even work with it.

Hyper-V wasn't a Microsoft Certification i had ever held because I've never directly worked with it before.

~Ibuprophen

XenHat commented 6 years ago

I haven't tried to use Classic Start on Windows Server. We have higher priority issues to fix (such as branding) but I do not see a major reason why we can't make this work.

@ibuprophen1

Is the Classic Start even compatible with Hyper-V if it doesn't even have a start menu to replace?

It works on Windows 8, as far as I know.

FaberfoX commented 6 years ago

I've been using Classic Shell on quite a few Server 2012 and 2012 R2 with no issues for years. Just tried the latest 4.4.109 on a full install of Windows Server 2016 with the latest patches and it works with no issues as I expected. Will try it on a Server core install (ie, without the desktop) and report back what I find.

@XenHat , as I said, Hyper-V Server is a separate, free product from microsoft, it's a windows server that's been extremely gutted, leaving just the bare minimum to work as VM host, but the plumbing is there, lots of windows apps just work. As an example of the gutting, it has Task Manager, but the link on it from the Performance tab to open Resource Monitor fails, as resmon.exe is not present.

This guy built a package of apps to make it resemble an usable desktop, it's quite ugly but functional, Classic Start would improve on it a lot. https://www.youtube.com/watch?v=9rnqN0NJ3bA

FaberfoX commented 6 years ago

Ok, I installed a Server 2016 Core (without the desktop) and it's the same, installs, starts but win-key doesn't trigger it. Are there any logs I could collect that can help you? Also, quick question: Is there a way to trigger the start menu to show from a cmd prompt, powershell or passing the exe a parameter?

XenHat commented 6 years ago

Not that I am aware of. I didn't write most of that code, this is a handed-down project and I will need some time to learn how it works inside.

EDIT: I have a hunch that Classic Start listens for a winKey hook that doesn't exist on windows server. We might be able to fix this by adding the keybind ourselves. I'll look into it when I have some time, unless someone else can implement this. @ibuprophen1 ?

ge0rdi commented 6 years ago

Classic Start is designed to load/inject into explorer.exe. If there is no explorer running, then obviously does nothing.

In order to support desktop-less systems we will have to load ClassicStartMenuDLL.dll into some other process (ClassicStartMenu.exe I guess) and somehow intercept Win Key globally. It may be possible, but I don't think it is easily doable in current state.

Ibuprophen commented 6 years ago

@ge0rdi, @XenHat & @coddec, I looked into this a bit and I'm running into many questions regarding the Hyper-V and explorer.exe.

From what I had found, by design, the Hyper-V doesn't have the explorer.exe because it lacks the "GUI" and that would result in Hyper-V not requiring the explorer.exe.

As a concensus of my findings, it looks like those individuals with Hyper-V have been using a small variety of different ways to handle this in a Virtual GUI way.

With there being no local graphical management tool for the Hyper-V, and there's no real easy way to get one up and running but, it's not impossible either.

I've found that there's some GUI style for these management options to include (but, not limited to) the following sample choices:

1) Remotely manage through another Windows 2008 R2 server with the Hyper-V Manager MMC.

2) Remotely manage through another Windows workstation with the Hyper-V Manager MMC.

3) Remotely manage through System Center Virtual Machine Manager.

etc... etc... etc...

My final thoughts here...

The Hyper-V not equipped with a GUI that results in the lack of requirement for it to even run the explorer.exe.

Without the explorer.exe currently the Classic Start will not work unless the Classic Start software is redone somehow somehow in a Virtual GUI way.

I did my best to explain the above via text.... 🤔

~Ibuprophen

Nodens- commented 6 years ago

Hyper-V is not a Windows OS by the traditional definition of the terms. It's a hypervisor. It's purpose is to load virtualized OS on top of it. It doesn't have explorer.exe and a gazillion other dependencies required for a classic start menu. You should close this issue as won't fix as classic shell was never meant to run on a hypervisor and it's not possible to do so without some weird frankenbuild that copies and registers binaries and components from normal windows versions (which also entails copyrights issues).

FaberfoX commented 6 years ago

@Nodens- as I posted above, it's not just a hypervisor, it's a lot more like a server core install, and being free and with a decent, non restrictive license, a great starting point to build on. Cairo desktop (https://github.com/cairoshell/cairoshell) works, as do most windows applications I installed on it. There's a great basic, local management gui in corefig (https://github.com/ejsiron/Corefig), so if a small stub on which to hook Classic Start was developed it would be great.

Wedmer commented 3 years ago

Just nobody mentioned that you can get a lot of stuff with Server Core App Compatibility Feature on Demand (FOD) You can get explorer.exe but it wouldn't act as a shell.

Wedmer commented 3 years ago

Ok. Figured this out. You should take ownership over HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AlternateShells\AvailableShells and remove all contents there.

ThunderEX commented 3 years ago

@Wedmer I find it's not necessary to remove all AvailableShells, you should find "DefaultShell"="explorer.exe" under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AlternateShells, then you could just create "60000"="explorer.exe" under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AlternateShells\AvailableShells, which is the same as win10 or windows server client experience.

Wedmer commented 3 years ago

@ThunderEX Good to know.

FaberfoX commented 3 years ago

This is great, just got it working on a fresh Hyper-V Server 2019 install. To sum it up: 1) Install latest recommended updates from Server Config (otherwise, FOD fails to install with a cryptic error) 2) Install App Compatibility Feature on Demand and Reboot: From the cmd window, run powershell and then Add-WindowsCapability -Online -Name ServerCore.AppCompatibility~~~~0.0.1.0 3) Use Regedit to take ownership of HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AlternateShells and give yourself Edit permissions to it. 4) Add a String Key named 60000 at HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AlternateShells\AvailableShells and fill it with explorer.exe 5) Download and Install OpenShell via powershell: On the cmd window that opens by default type powershell and then mkdir C:\Temp wget https://github.com/Open-Shell/Open-Shell-Menu/releases/download/v4.4.160/OpenShellSetup_4_4_160.exe -OutFile C:\Temp\OpenShell.exe C:\Temp\OpenShell.exe 6) Logoff, log back on and enjoy!

Btw, this works both for Server Core and Hyper-V Server

Maybe the installer could take care of creating the key if it detects that FOD is installed? It would have the necessary privileges needed to do it

Thanks @Wedmer and @ThunderEX !!!

coddec commented 3 years ago

This is great, just got it working on a fresh Hyper-V Server 2019 install. To sum it up:

  1. Install latest recommended updates from Server Config (otherwise, FOD fails to install with a cryptic error)
  2. Install App Compatibility Feature on Demand and Reboot: From the cmd window, run powershell and then Add-WindowsCapability -Online -Name ServerCore.AppCompatibility~~~~0.0.1.0
  3. Use Regedit to take ownership of HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AlternateShells and give yourself Edit permissions to it.
  4. Add a String Key named 60000 at HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AlternateShells\AvailableShells and fill it with explorer.exe
  5. Download and Install OpenShell via powershell: On the cmd window that opens by default type powershell and then mkdir C:\Temp wget https://github.com/Open-Shell/Open-Shell-Menu/releases/download/v4.4.160/OpenShellSetup_4_4_160.exe -OutFile C:\Temp\OpenShell.exe C:\Temp\OpenShell.exe
  6. Logoff, log back on and enjoy!

Btw, this works both for Server Core and Hyper-V Server

Maybe the installer could take care of creating the key if it detects that FOD is installed? It would have the necessary privileges needed to do it

Thanks @Wedmer and @ThunderEX !!!

Thanks for sharing!!!

MilesTFox commented 2 years ago

I did the above steps from FaberfoX, but at step 5 I used chocolatey to install open-shell and that worked flawlessly as well.

ibay770 commented 10 months ago

Or you can try Winxshell that also works.

robinwilson16 commented 7 months ago

I have tried to do this on Server Core 23H2 but all I get is a black screen as soon as I add explorer.exe in AvailableShells with the higher number which I was getting before but installing OpenShell but even after a reboot I just get nothing. To open an explorer window I then need to run explorer.exe c: from Task Manager otherwise with explorer.exe on its own nothing happens. I can see the new toolbar in the explorer window but I get no taskbar/start menu or interface of any description and I have tried to run the executables from the OpenShell install folder in Program Files too.

Has Microsoft blocked this from working in the newer versions?

ibay770 commented 7 months ago

Try changing the filename, see what happens. That's how I got explorerpatcher and startallback to work