Czy istnieje sposób na trwałe ustawienie zmiennej środowiskowej zawierającej więcej niż 4096 znaków w systemie operacyjnym Windows?

0

Obecnie szukam sposobu na przekroczenie limitu długości zmiennej środowiskowej w systemie operacyjnym Windows, a maksymalny osiągnięty limit to 4133. Ale w moim projekcie muszę sprawdzić instalację systemu z dłuższą ścieżką (8000, 16000 lub nawet maksymalnie 32000).

polecenie setx jest wyłączone, ponieważ automatycznie obciąło środowisko ścieżki do 1024 znaków.

Próbowałem API SetEnvironmentVariable () PowerShell i wydaje się, że ma limit ~ 4133 znaków, reszta jest automatycznie obcinana lub nie działa poprawnie.

Czy jest jakiś sposób na przekroczenie tego limitu?

Dang Thien Nguyen
źródło
Czy próbowałeś interfejsu API win32 lub API .NET? Ten pierwszy dokumentuje się jako mający maksymalnie 32k, więc obcięcie byłoby dziwne.
grawity
Wszystkie zmienne środowiskowe (nazwy, wartości, ograniczniki, terminator) zajmują jeden blok pamięci. Rozmiar tego bloku wynosi 32 kb (-1 bajt). Twoje zadanie wygląda na nierozwiązywalne ... przynajmniej bez rozszerzenia tego bloku (i nie wiem jak to zrobić).
Akina
Nie sądzę, że można to zrobić. Ale i tak nie trzeba go używać %PATH%do weryfikacji. Dlaczego nie użyć bezwzględnej ścieżki lub po prostu płyty CD do folderu? Jestem pewien, że w zmiennej jest wiele zbędnych ścieżek. A nawet jeśli długość jest nadal zbyt długo można łatwo zamontować drogę do jednego z krótszym subst, mountvollub dowiązania symbolicznego. Pokonanie limitu 1024 znaków dzięki setx
phuclv
@ grawitacja, która jest dla zmiennych zdefiniowanych przez użytkownika. Limit %PATH%zmiennej wynosi 2047/4095 znaków , support.microsoft.com/en-us/help/2685893/... , blogs.msdn.microsoft.com/oldnewthing/20100203-00/?p=15083
phuclv

Odpowiedzi:

1

Dokumentacja Microsoft mówi, że zmienna środowiskowa w systemie Windows jest ograniczona do 32 767 znaków ( link ). Nie mówi, jak utworzyć bardzo długą zmienną.

Problem polega na tym, że narzędzia oferowane przez system Windows mają swoje ograniczenia:

  • Komendy set i setx obcinają wartości do 1023 znaków.

  • Ustawienie bezpośrednio w rejestrze na HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment, kończy się niepowodzeniem, ponieważ regedit obcina wprowadzone ciągi znaków po 2047 znakach.

O ile widzę, twoją jedyną pozostałą opcją jest napisanie małego programu za pomocą funkcji Windows API SetEnvironmentVariable , której dokumentacja określa limit 32 767 znaków. Skrypty tutaj by nie pomogły, ponieważ mają również swoje ograniczenia.

harrymc
źródło