Dieses Problem ist mir auch schon begegnet. Mein Fall ist der folgende:
Im Text:
HKEY_CURRENT_USER\Environment
Path REG_SZ %JAVA_HOME%\bin;C:\ProgramFiles\nodejs
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
JAVA_HOME REG_SZ C:\ProgramFiles\Java\jdk
Path REG_EXPAND_SZ C:\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\
WindowsPowerShell\v1.0\;C:\Program Files\Intel\DMIX;c:\Program Files (x86)\Microsoft SQL Server\90\Tools\binn\;C:\Progra
m Files (x86)\Perforce;C:\ProgramFiles\010 Editor;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\ProgramFiles\
Git\cmd;C:\Program Files (x86)\Skype\Phone\
C:\Users\ssfang> echo %^JAVA_HOME% = "%^JAVA_HOME%" = %%JAVA_HOME%% %JAVA_HOME%
%JAVA_HOME% = "%^JAVA_HOME%" = %C:\ProgramFiles\Java\jdk% C:\ProgramFiles\Java\jdk
Ich habe ihre Typen des Registrierungswerts gefunden Path
sind unterschiedlich, daher habe ich mit folgendem Befehl überprüft, ob der Pfad gültig ist oder nicht:
C:\Users\ssfang> where node java
C:\ProgramFiles\nodejs\node.exe
INFO: Could not find "java".
Daraufhin habe ich die lokale Umgebung (des aktuellen Benutzers) mit den folgenden Befehlen zurückgesetzt ( Setx ):
C:\Users\ssfang> setx PATH %^JAVA_HOME%\bin;"C:\ProgramFiles\nodejs"
SUCCESS: Specified value was saved.
C:\Users\ssfang> reg query HKEY_CURRENT_USER\Environment /v Path
HKEY_CURRENT_USER\Environment
Path REG_EXPAND_SZ %JAVA_HOME%\bin;C:\ProgramFiles\nodejs
C:\Users\ssfang> where node java
C:\ProgramFiles\nodejs\node.exe
INFO: Could not find "java".
C:\Users\ssfang>echo %PATH%
C:\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Fi
les\Intel\DMIX;c:\Program Files (x86)\Microsoft SQL Server\90\Tools\binn\;C:\Program Files (x86)\Perforce;C:\ProgramFile
s\010 Editor;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\ProgramFiles\Git\cmd;C:\Program Files (x86)\Skype\
Phone\;%JAVA_HOME%\bin;C:\ProgramFiles\nodejs
Im aktuellen Prozess können diese Änderungen jedoch nicht an andere laufende Prozesse weitergegeben werden.
Wenn Sie jedoch die Umgebungsvariablen des Benutzers direkt im Registrierungs-Editor ändern,
diese Änderungen an den Umgebungsvariablen tun nicht zu einer unmittelbaren Änderung führen. Wenn Sie zum Beispiel eine andere Eingabeaufforderung starten, nachdem Sie die Änderungen vorgenommen haben, werden die Umgebungsvariablen die vorherigen (nicht die aktuellen) Werte wieder. Die Änderungen werden nicht werden erst wirksam, wenn Sie sich ab- und wieder anmelden.
Um diese Änderungen vorzunehmen, ohne sich abmelden zu müssen, senden Sie eine WM_SETTINGCHANGE-Nachricht an alle Windows im System, so dass alle interessierten Anwendungen (wie Windows Explorer, Programm-Manager, Task-Manager, Systemsteuerung und so weiter) eine Aktualisierung durchführen können.
Siehe Einzelheiten unter Wie man Umgebungsvariablen an das System weitergibt
Hier gebe ich ein Powershell-Skript, um dies zu tun:
# powershell -ExecutionPolicy ByPass -File
# Standard, inline approach: (i.e. behaviour you'd get when using & in Linux)
# START /B CMD /C CALL "foo.bat" [args [...]]
# powershell -ExecutionPolicy ByPass -WindowStyle Hidden -File myScript.ps1
<#
Add-Type @'
public class CSharp
{
public static void Method(object[] first, object[] second)
{
System.Console.WriteLine("Hello world");
}
}
'@
$a = 1..4;
[string[]]$b = "a","b","c","d";
[CSharp]::Method($a, $b);
#>
<#
#http://stackoverflow.com/questions/16552801/how-do-i-conditionally-add-a-class-with-add-type-typedefinition-if-it-isnt-add
#Problem Add-Type : Cannot add type. The type name 'PInvoke.User32' already exists.
if (-not ("MyClass" -as [type])) {
add-type @"
public class MyClass { }
"@
}
p.s. there's no Remove-Type; see this answer for more on how to best work around this limitation:
http://stackoverflow.com/questions/3369662/can-you-remove-an-add-ed-type-in-powershell-again
I think it will be wanted when debugging.
It is much simpler to close a tab in Console and open new one in PowerShell_ISE.exe or close PowerShell.exe.
Or
Start-Job -ScriptBlock {
param([uri]$url,$OutputDir)
# download and save pages
Invoke-RestMethod $url | Out-File "$OutputDir\$($url.Segments[-1])" -Force
} -ArgumentList $link,$OutputDir
#>
if (-not ([System.Management.Automation.PSTypeName]'PInvoke.Program').Type)
{
$sig=@"
using System;
using System.Runtime.InteropServices;
using System.Text;
using System.Collections.Generic;
// The global namespace is the "root" namespace: global::system will always refer to the .NET Framework namespace System.
///P/Invoke (Platform Invoke)
namespace PInvoke
{
public static class User32
{
/// http://www.pinvoke.net/default.aspx/Constants/HWND.html
// public const IntPtr HWND_BROADCAST = new IntPtr(0xffff);
/// https://msdn.microsoft.com/en-us/library/windows/desktop/ms725497(v=vs.85).aspx
/// http://www.pinvoke.net/default.aspx/Constants/WM.html
public const UInt32 WM_SETTINGCHANGE = 0x001A;
// SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM) "Environment", SMTO_ABORTIFHUNG, 5000, &dwReturnValue);
/// https://msdn.microsoft.com/en-us/library/windows/desktop/ms644952(v=vs.85).aspx
/// If the function succeeds, the return value is nonzero.
[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SendMessageTimeout", SetLastError = true)]
public static extern uint SendMessageTimeout(IntPtr hWnd, uint Msg, int wParam, string lParam, SendMessageTimeoutFlags fuFlags, uint uTimeout, out int lpdwResult);
}
[Flags]
public enum SendMessageTimeoutFlags : uint
{
SMTO_NORMAL = 0x0,
SMTO_BLOCK = 0x1,
SMTO_ABORTIFHUNG = 0x2,
SMTO_NOTIMEOUTIFNOTHUNG = 0x8,
SMTO_ERRORONEXIT = 0x20
}
public class Program
{
public static void Main(string[] args)
{
//int innerPinvokeResult;
//uint pinvokeResult = User32.SendMessageTimeout(User32.HWND_BROADCAST, User32.WM_SETTINGCHANGE, 0, "Environment", SendMessageTimeoutFlags.SMTO_NORMAL, 1000, out innerPinvokeResult);
Console.WriteLine("Over!!!!!!!!!!!!!!!!!!!!!!!!!");
}
}
}
"@
Add-Type -TypeDefinition $sig
}
## [PInvoke.Program]::Main([IntPtr]::Zero);
$innerPinvokeResult=[int]0
[PInvoke.User32]::SendMessageTimeout([IntPtr]0xffff, [PInvoke.User32]::WM_SETTINGCHANGE, 0, "Environment", [PInvoke.SendMessageTimeoutFlags]::SMTO_NORMAL, 1000, [ref]$innerPinvokeResult);
Setx setx [/s [/u [] [/p []]]] [/m]
/m Specifies to set the variable in the system environment. The default setting is the local environment
3 Stimmen
Java Runtime Environment
ist JRE und nicht SDK...1 Stimmen
Installieren Sie eine JRE - dadurch erhalten Sie eine javaw.exe in Ihrem Pfad. Bei JDKs ist das nicht der Fall.
12 Stimmen
@Carlos, jedes JDK bringt eine eigene JRE mit.
3 Stimmen
@Thorbjørn: Und was ist der Sinn? Ich weiß, dass und auch, dass JDK bringt auch eine öffentlich JRE. Ich habe geschrieben, dass "Java Runtime Environment nicht SDK" ist, aber Sie müssen den ursprünglichen Beitrag lesen (bevor er am 11. Januar bearbeitet wurde), um zu verstehen warum Ich habe es geschrieben: "A java Runtime Environment ( SDK ) oder..."
11 Stimmen
Wenn Sie kürzlich JDK in einem anderen Pfad installiert haben, nachdem Sie Eclipse installiert haben, kann dieses Problem auftreten. Dies liegt daran, dass Eclipse den JDK-Pfad in der eclipse.ini fest einträgt, wenn es zum ersten Mal eingerichtet wird. Ändern Sie einfach den richtigen JDK-Pfad in eclipse.ini. Damit sollte der Fehler behoben sein.
0 Stimmen
Navigieren Sie zu
C:\Program Files\Java\jreX\bin
und kopierenjavaw.exe
aC:\Program Files\sts-bundle\sts-X.X.X.RELEASE
. Wenn es keinejavaw.exe
imbin
installieren Sie Java JRE.0 Stimmen
Ich bin auf dieses Problem gestoßen, als ich Eclipse Keplerx86 auf W8.1 ausgeführt habe. Weil ich ordentlich bin, wollte ich den jre-Ordner nicht in das eclipse-Verzeichnis kopieren. Ich habe es geschafft, eclipse zu starten, nachdem ich alle jre- und Sicherstellen, dass die Pfade zu den Java-Instanzen keine Leerzeichen enthalten. Dann habe ich die
eclipse.ini
Datei (im eclipse Root Verzeichnis) und aktualisierte das Argumentopenfile -vm "C\:tools\java\..."
Pfad. "Wie hier gezeigt" . ~Ich hoffe, es wird helfen und Kopfschmerzen ersparen.0 Stimmen
Ich habe eine andere JRE installiert, nachdem ich den Eclipse-Woekspace erstellt hatte, also habe ich einen neuen Workspace erstellt und die neue JRE wurde erkannt