Jak sprawić, by mapowanie SUBST było trwałe podczas ponownego uruchamiania?

177

Czy system Windows (XP lub nowszy) ma wbudowany sposób tworzenia trwałych mapowań dysków, takich jak te tworzone przez SUBST? Znalazłem narzędzie zewnętrzne psubst . Czy można to zrobić bez narzędzi innych firm?

stóg
źródło
Jest to możliwe, ponieważ psubstjest to tylko plik .bat, który psuje się w rejestrze. Szczegółowe informacje znajdują się w odpowiedzi @ davr poniżej.
Scott Stafford,
Zastrzeżenie z artykułu z Wikipedii w zaakceptowanej odpowiedzi: „ Począwszy od systemu Windows Vista, usunięte pliki są natychmiast trwale usuwane i nie są przenoszone do„ Kosza ”. Przed Windows Vista (na przykład w systemie Windows XP) pliki z podstawionych” dyski „zostały przeniesione do Kosza po usunięciu
JMD
1
@IvoFlipse, to ogólnie dobre założenie, ale w tym przypadku jest to po prostu złe. „Narzędzie innej firmy” to plik wsadowy o długości 150 wierszy, który zapewnia ładne cli do modyfikowania rejestru i czyszczenia danych wejściowych w celu dostosowania do substwybrednych reguł końcowego slashowania, ale to po prostu ładne opakowanie . Możesz to zrobić bez programu, a plik README psubstwyjaśnia, jak to zrobić . Lub zobacz odpowiedź davr poniżej, w której cytuje on psubst README.
alexanderbird,
Dodałem odpowiedź, która rozwiązuje problem kosza
Tony Pulokas

Odpowiedzi:

154

Cóż, Wikipedia wspomina :

C:\>SUBST /?
Associates a path with a drive letter.

SUBST [drive1: [drive2:]path]
SUBST drive1: /D

  drive1:        Specifies a virtual drive to which you want to assign a path.
  [drive2:]path  Specifies a physical drive and path you want to assign to
                 a virtual drive.
  /D             Deletes a substituted (virtual) drive.

Type SUBST with no parameters to display a list of current virtual drives.

Możesz więc powiązać ścieżki z literami dysków za pomocą subst. Polecenia Trwałe SUBST (psubst) oprogramowanie wydaje się być cholernie przydatny, i stanowią one rozwiązania, aby uruchomić go z uruchomieniem:

https://code.google.com/p/psubst/#Inconstancy

Niestałość

Jednak ponowne uruchomienie systemu niszczy dysk wirtualny. Co robić? Dysk można utworzyć po uruchomieniu. Ale co zrobić, gdy dysk jest potrzebny na wczesnych etapach uruchamiania? Na przykład, aby uruchomić usługi? Istnieje funkcja systemowa umożliwiająca uruchomienie dysku wirtualnego z rejestru systemowego:

REGEDIT4 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices] 
"Z:"="\\??\\C:\\Documents and Settings\\All Users\\Shared Documents"

Wystarczy utworzyć plik tekstowy z rozszerzeniem .REGi uruchomić go. Przy następnym uruchomieniu systemu dysk wirtualny będzie istniał podczas logowania. Musi zdefiniować nazwę dysku i ścieżki. Zauważ, że każdy ukośnik odwrotny na ścieżce jest podwojony.

W systemie Windows można uruchomić edytor rejestru w następujący sposób:

  1. Start »Uruchom ... (lub naciśnij Win+ R)
  2. Rodzaj: regedit
  3. W systemie Windows Vista i nowszych pojawi się UAC, kliknij „Tak” .
Ivo Flipse
źródło
6
Miło wiedzieć, chociaż substjuż nie używam . Ale w czasach, kiedy to robiłem, po prostu miałem plik wsadowy w moim folderze Autostart, który robił te rzeczy.
Joey,
2
To jest niesamowite. (Wymaga ponownego uruchomienia komputera, FYI.) Nasze drzewo źródłowe musi zaczynać się od określonej litery dysku, aby wszystkie nasze PDB zawsze były wyrównane na różnych komputerach. To ustawienie rejestru rozwiązuje uciążliwość, którą miałem od lat, gdy nie ma tam dysku zastępczego z runami, co jest dużym irytacją, jeśli musisz (rzadko) uruchamiać Visual Studio na koncie administratora.
Brian Reiter
3
Joey: Wydaje się, że to rozwiązanie nie działa w systemie Windows 7. Po uruchomieniu aplikacji z uprawnieniami administracyjnymi podstawiony dysk nie jest widoczny dla aplikacji.
Dave Jarvis
31
Dzięki za rozwiązanie. Do Twojej informacji, jeśli wpiszesz zmienną w RegEdit interaktywnie, nie podwajaj odwrotnych ukośników. To znaczy, stwórz nową zmienną łańcuchową o nazwie „Z:” (bez cudzysłowów) i ustaw wartość na łańcuch pokazany powyżej, z wyjątkiem pojedynczych ukośników odwrotnych.
Chrupiące
3
@ Devil'sAdvocate, \??to katalog wirtualny w przestrzeni nazw NT menedżera obiektów. Najpierw sprawdza „urządzenia” sesji DOS logowania (tak naprawdę urządzenia DOS to dowiązania symboliczne do urządzeń NT, zwykle znajdujące się w \Device), a następnie \Global??urządzenia DOS. W WinObj znajdziesz urządzenia do sesji logowania \Sessions\0\DosDevices\[logon ID]. Zauważ, że urządzenia sesji logowania są śledzone w sesji 0 (usługi) dla każdego identyfikatora logowania LSA. Nie są skorelowane z sesjami stacjonarnymi. Dlatego jeśli mapujesz dysk jako ograniczony administrator, nie będzie on istniał po podniesieniu; to inne logowanie.
Eryk Sun,
76

Zainstalowanie go HKEY_CURRENT_USERma tę zaletę, że ma różne ustawienia dla każdego użytkownika. Wolę trzymać konfigurację przestrzeni użytkownika, o ile usługa systemowa nie zależy od urządzenia.

REGEDIT4
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
"F Drive"="subst F: D:\\mount\\db"
"G Drive"="subst G: D:\\mount\\log"

Źródło: http://networkadminkb.com/KB/a446/how-to-use-drive-letters-mount-points-the-same-disk-drive.aspx

166_MMX
źródło
7
+1 Za pokazanie, jak wykonać wiele mapowań w jednym pliku reg. :-)
megaflop
4
+1 za łatwość tego i wyjaśnienie, dlaczego HKEY_CURRENT_USER. :)
CAD bloke
1
+1 za pokazanie bardzo eleganckiego sposobu zautomatyzowanego zrobienia tego bez partii w folderze startowym
dkellner
3
Można również zrobić to z poziomu wiersza poleceń (od XP / Windows Server 2000): reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v "F Drive" /d "subst F: D:\x\db" NB \ potrzebuje tylko uciekając się tutaj, jeśli jest to ostatni znak polecenia subst, np gdy cel jest katalog root: "subst F: D:\\"; singiel \ będzie interpretowany jako ucieczka od „następującego po nim.”
stevek_mcc
44

Na stronie, do której linkujesz, jest odpowiedź. Nie potrzebujesz narzędzia innej firmy, możesz to zrobić za pomocą prostego wpisu rejestru, jak opisano na tej stronie.

Utwórz plik tekstowy o nazwie „mapdrive.reg” z następującą zawartością:

REGEDIT4 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices] 
"Z:"="\\??\\C:\\Documents and Settings\\All Users\\Shared Documents" 

Następnie powinno być możliwe dwukrotne kliknięcie na nim, aby skonfigurować, żadne narzędzia innych firm nie są potrzebne.

davr
źródło
8
zaletą klucza reg w porównaniu z plikiem wsadowym jest to, że ustawia on napęd zastępczy przed uruchomieniem innych poleceń uruchamiania, na wypadek, gdyby niektóre z nich potrzebowały napędu
zastępczego
6
@Ivo: Nazwałbym to zdrowym strachem przed nieznanym;)
Isxek
9
Jeśli robisz to w regedit, upewnij się, że używasz pojedynczych ukośników odwrotnych. np. \ ?? \ C: \ Some \ Directory
Droj
27

Znalazłem to, ponieważ szukałem ulepszenia w stosunku do moich skryptów zastępczych uruchamiania - działały OK, ale czasami były uruchamiane po awarii folderów podczas uruchamiania, ponieważ mój dysk nie był jeszcze zmapowany.

Najpierw edytowałem rejestr, ale nie mogłem go uruchomić. Jednak natknąłem się na tę alternatywę, która chociaż nie korzysta z subst, odpowiada mi pytanie: „Jak sprawić, by mapowanie SUBST było trwałe po ponownym uruchomieniu?” Nie używaj subst ... (wstaw odpowiednie „nazwa_komputera” i „nazwa_ścieżki”):

net use u: "\\ nazwa_komputera \ c $ \ nazwa_ścieżki" / trwały: tak

Zaadaptowałem to z sugestii Hanka Arnolda podczas dyskusji na temat mapowania lokalnych napędów . Domyślałem się, że \\ mojaKomputerName \ c może działać, ale nie wiedziałem, aby zastosować $.

Przed wypróbowaniem polecenia „net use” spróbuj przejść do

\\ nazwa_komputera \ c $
aby upewnić się, że poprawna jest nazwa komputera

szałwia
źródło
2
Doskonałe rozwiązanie, choć z dwoma problemami: 1) nie jest widoczne dla lokalnego systemu plików, 2) uprawnienia ...
ashes999 11.11.11
6
jeśli \\localhost\c$\path\to\thinggo używasz , jest przenośny na różne komputery (lub aktualizacje, które zmieniają nazwę komputera). Wadą korzystania z dysku zamapowanego w Win7 + jest to, że dyski sieciowe mają inne zasady bezpieczeństwa niż lokalne, a niektóre programy po prostu odmawiają uruchomienia dysku zamapowanego.
matt wilkie
1
Jest widoczny dla systemu plików i jest widoczny dla lokalnego systemu plików - jest oznaczony jako dysk sieciowy, podobnie jak niektóre dyski są oznaczone jako dyski wymienne. Nie powoduje to, że takie dyski nie są częścią lokalnego systemu plików ani nie są widoczne dla niego - czyni je dyskami sieciowymi / wymiennymi w lokalnym systemie plików.
user165568,
1
W testach zrobiłem to dla problemu z wydajnością (kilka lat temu) przy użyciu (lokalnie) zamontowanego napędu sieciowego jest również wolniejsze niż bezpośrednie użycie systemu plików (lub subst. Itp.). Nie jest to ogromna różnica w przypadku małych plików lub okazjonalnego użytkowania - nie tak jak przejście przez rzeczywistą sieć do innego „serwera” - ale jest znacząca.
HerbM
8

Upuść plik wsadowy w folderze Autostart, który wykonuje wszystkie SUBST, które chcesz wykonać.

EBGreen
źródło
5

Ponieważ oryginalny PSubst ma pewne ograniczenia i wydaje się, że autor doszedł do wniosku, musiałem zakodować nową wersję na moje potrzeby, naprawić niektóre problemy oraz dodać funkcjonalność i elastyczność.

Sprawdź tutaj plik wsadowy PSubst wersja 3

https://github.com/cyberponk/psubst

Kompatybilny z Windows 7, Windows 8, Windows 10, Windows Server 2012

Uwaga: Ta praca nie ma zamiaru demerować oryginalnego autora i powstała z powodu prawdziwej konieczności, jak następuje:

  • Jako administrator newtork stale potrzebuję SUBST´ingowych dysków sieciowych i majstrowania przy różnych użytkownikach sieci.

  • Ponieważ nie każdy jest ekspertem od systemu Windows, pomyślałem, że automatyczne podniesienie uprawnień administratora z obsługą błędów pomogłoby na podstawie komentowanych przeze mnie informacji w Internecie.

  • Ponieważ niektórzy ludzie zmagali się z kolejnością argumentów, pomyślałem, że najlepiej byłoby, gdyby skrypt działał z argumentami w dowolnej kolejności.

Nie mogę sobie przypomnieć każdej dodatkowej funkcjonalności, ale każda integracja została wykonana wyłącznie z konieczności. Udostępniam kod, aby inni mogli nie napotkać problemów, które miałem. Dzięki temu nie ma innej intencji niż dzielenie się i pomaganie.

cyberponk
źródło
Proszę powiedzieć „A”, powiedzieć „B”. Masz pewność, że oryginalny psubst ma wiele problemów - proszę o nich wskazać, jeśli są. Z drugiej strony psubst nie jest porzucany. Właśnie osiągnął granicę swojego rozwoju. Oryginalne narzędzie kieruje się bardzo prostą filozofią: zrób coś i dobrze. Nie jest przeciążony dodatkowymi funkcjami, takimi jak obsługa UAC i tworzenie dodatkowego kodu vbs do robienia czegoś więcej. Można zrobić jedną rzecz w stosunku do oryginalnego kodu - niektóre kosmetyczne zmiany w celu uproszczenia kodu i poprawy czytelności.
jsxt
Zmodyfikowane, proszę przejrzeć. UAC i vbs służą do automatycznego podniesienia uprawnień administratora. Nie zgadzam się z komentarzem na temat „granicy rozwoju”, ponieważ wszystkie zmiany, które wprowadziłem, miały uczynić korzystanie z niego jeszcze prostszym i łatwiejszym po tym, jak napotkałem kilka problemów z używaniem PSUBST. Nie zamierzam krytykować oryginalnego autora, więc nie będę wymieniał problemów, ale stworzyłem rozwiązania. Właściwie zaproponowałem dodanie moich edycji do oryginalnej gałęzi github, ale odmówiłem, więc musiałem stworzyć własną gałąź.
cyberponk
Dziękujemy za szybką i szczegółową informację zwrotną. Najprawdopodobniej muszę przyjrzeć się bliżej rozwojowi.
jsxt
Mój kapelusz jest dla ciebie; Spędziłem czas w okopach wsadowych i wiem, jak bolesne to jest. Ten kod wygląda całkiem dobrze.
SilverbackNet
2

Mam rozszerzenie na odpowiedź davr za ponieważ wszystkie pliki, które zostały usunięte z dysku odwzorowanym są trwale usunięte zamiast iść do Kosza. Ten plik REG jest oparty na informacjach zebranych z tego artykułu TechNet , który omawia sposób włączania Kosza. Przykład mapuje wirtualny dysk Q na folder „OneDrive - Test” i włącza Kosz na dysku Q. Zmień ścieżki i nazwę odpowiednio do swojej sytuacji.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices]
"Q:"="\\??\\C:\\Users\\Tony\\OneDrive - Test"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{9147E464-33A6-48E2-A3C9-361EFD417DEF}]
"RelativePath"="Q:\\"
"Category"=dword:00000004
"Name"="Q_Mapped_OneDrive"

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\KnownFolder\{9147E464-33A6-48E2-A3C9-361EFD417DEF}]
"MaxCapacity"=dword:0000c7eb
"NukeOnDelete"=dword:00000000

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{9147E464-33A6-48E2-A3C9-361EFD417DEF}]
"RelativePath"="Q:\\"
"Category"=dword:00000004
"Name"="Q_Mapped_OneDrive"

[HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\KnownFolder\{9147E464-33A6-48E2-A3C9-361EFD417DEF}]
"MaxCapacity"=dword:0000c7eb
"NukeOnDelete"=dword:00000000

Jeśli masz tylko jeden taki zamapowany dysk, możesz uniknąć GUID {9147E464-33A6-48E2-A3C9-361EFD417DEF}. Jeśli masz wiele mapowanych dysków, każdy z nich powinien być dopasowany do GUID z twojego ulubionego generatora GUID.

Tony Pulokas
źródło
Niektóre z moich obserwacji: jeśli po prostu ustawisz wartości poniżej HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{GUID}i zrestartujesz, odpowiednie wartości poniżej HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\KnownFolder\{GUID}zostaną automatycznie wygenerowane przez system Windows. Nic nie pokazało mi się pod Wow6432Nodekluczami, ale kosz działał bez nich. Tak było w systemie Windows 7, więc nie jestem pewien, czy zachowuje się inaczej w nowszych wersjach.
Herohtar,
1
Aby dodać trochę danych, mam 64-bitowy system Win 10 i przetestowałem, co się stało podczas usuwania z 32-bitowej aplikacji (FastStone Image Viewer), i stwierdziłem, że kosz nie działa dla 32 -bitowa aplikacja bez kluczy Wow6432Node.
Tony Pulokas