Як зробити відображення SUBST стійким під час перезавантаження?


177

Чи має Windows (XP або новіша версія) вбудований спосіб створювати постійні відображення диска, як ті, які створює SUBST? Я знайшов сторонній інструмент psubst . Чи є спосіб це зробити без сторонніх інструментів?


Це можливо, тому що psubstце просто .bat файл, який зв'язується з реєстром. Детальну інформацію див. У відповіді @ davr нижче.
Скотт Стаффорд

Зауважте зі статті Вікіпедії у прийнятій відповіді: " Починаючи з Windows Vista, видалені файли негайно видаляються назавжди і не переміщуються до" Кошика ". До Windows Vista (наприклад, у Windows XP) файли із замінених" диски "були переміщені до кошика при видаленні ".
JMD

1
@IvoFlipse, це взагалі хороше припущення, але в цьому випадку це просто неправильно. "Інструмент сторонньої сторони" - це пакетний файл розміром 150 рядків, який надає приємний кліп для зміни реєстру та очищення вхідних даних, щоб відповідати substвибагливим правилам слідуючої косої риси, але це просто гарне обгортка . Ви можете це зробити без програми, і README psubstпояснює, як це зробити. Або дивіться відповідь davr нижче, де він цитує psubst README.
alexanderbird

Я додав відповідь, яка вирішує проблему кошика
Тоні Пулокас

Відповіді:


154

Добре згадується Вікіпедія :

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.

Таким чином, ви можете пов’язати шляхи з літерами диска за допомогою subst. Команда Persistent SUBST (psubst) програмне забезпечення , здається, до біса зручно, і вони забезпечують рішення запустити її з запуску:

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

Невідповідність

Однак перезапуск системи знищує віртуальний диск. Що робити? Диск можна створити після запуску. Але що робити, коли диск потрібен на ранніх кроках запуску? Наприклад, запускати сервіси? Існує функція системи для запуску віртуального диска з системного реєстру:

REGEDIT4 

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

Досить створити текстовий файл із розширенням .REGта запустити його. При наступному запуску системи віртуальний диск буде існувати при вході в систему. Для цього потрібно визначити назву диска та шлях. Зауважте, що кожен зворотний проріз у шляху подвоюється.

У Windows можна запустити редактор реєстру наступним чином:

  1. Старт »Виконати ... (або натисніть Win+ R)
  2. Тип: regedit
  3. У Windows Vista і вище UAC з’явиться, натисніть «Так» .

6
Приємно знати, хоча я більше не користуюся subst. Але ще в часи, коли я це робив, я просто мав пакетний файл, що сидів у моїй папці запуску, який робив ці речі.
Джої,

2
Це круто. (Для цього потрібна перезавантаження, FYI.) Наше дерево джерела повинно починатися з конкретної літери накопичувача, щоб усі наші PDB завжди вирівнювалися на різних комп'ютерах. Цей параметр реєстру розв'язує роздратування, яке я роками не мав, коли підміщений диск не знаходився там із рунами, що є великим роздратуванням, якщо вам потрібно (рідко) запускати Visual Studio під обліковим записом адміністратора.
Брайан Рейтер,

3
Joey: Схоже, це рішення не працює в Windows 7. Під час запуску програми з адміністративними привілеями, заміщений диск не видно програмі.
Дейв Джарвіс

31
Дякую за рішення. FYI, якщо ви вводите змінну в RegEdit інтерактивно, не подвоюйте косої риски. Тобто створіть нову змінну рядка під назвою "Z:" (без лапок) і встановіть значення рядку, показаному вище, за винятком одинарних зворотних косої риски.
Хрусткий

3
@ Devil'sAdvocate, \??це віртуальний каталог у просторі імен менеджера об'єктів NT. Спочатку він перевіряє "пристрої" сеансу входу в систему (дійсно пристрої DOS - символічні посилання на пристрої NT, зазвичай розташовані в \Device), а потім \Global??пристрої DOS. У WinObj ви знайдете пристрої сеансу входу \Sessions\0\DosDevices\[logon ID]. Зауважте, що всі пристрої сеансу входу відстежуються в сеансі 0 (послуги) для кожного ідентифікатора входу в LSA. Вони не співвідносяться із сеансами на робочому столі. Ось чому, якщо ви зобразите диск як обмежений адміністратор, він не існує при підвищенні; це інший вхід.
Ерік Вс

76

Встановлення його на HKEY_CURRENT_USERкористь має різні налаштування для кожного користувача. Я вважаю за краще дотримуватися налаштування простору користувача до тих пір, поки системна послуга не залежить від пристрою.

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

Джерело: http://networkadminkb.com/KB/a446/how-to-use-drive-letters-mount-points-the-same-disk-drive.aspx


7
+1 Показує, як робити кілька відображень в одному файлі рег. :-)
мегафлоп

4
+1 для простоти цього, а також пояснення, чому HKEY_CURRENT_USER. :)
CAD блокується

1
+1 за показ дуже елегантного способу автоматичного виконання без
пачки в

3
Можна також зробити це з командного рядка (оскільки сервер XP / Windows 2000): reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v "F Drive" /d "subst F: D:\x\db" NB \ тут потрібно уникати лише тоді, коли він є останнім символом команди subst, наприклад, коли цільовою є коренева директорія "subst F: D:\\":; один \ буде трактовано як "втеча за ним"
stevek_mcc

44

На сторінці, на яку ви пов’язані, є відповідь. Вам не потрібен сторонній інструмент, ви можете зробити це за допомогою простого запису реєстру, детально описаного на цій сторінці.

Створіть текстовий файл під назвою 'mapdrive.reg' із цим вмістом:

REGEDIT4 

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

Тоді слід просто мати можливість двічі клацнути по ньому, щоб налаштувати, сторонні інструменти не потрібні.


8
Перевага ключа reg порівняно з пакетним файлом полягає в тому, що він встановлює субст-диск перед запуском будь-яких інших команд запуску, якщо комусь із них потрібен функція накопичувача
davr,

6
@Ivo: Я б назвав це здоровим страхом перед невідомим;)
Іссек

9
Якщо ви робите це в regedit, обов'язково використовуйте одну зворотну косу рису. напр. \ ?? \ C: \ Some \ Directory
Droj

27

Я знайшов це, тому що шукав поліпшення щодо моїх скриптів запуску субстратів - вони працювали нормально, але іноді виконувалися після падіння папок при запуску, оскільки мій диск ще не був відображений.

Спершу я редагував реєстр, але не зміг змусити його працювати. Однак я натрапив на цю альтернативу, яка, хоча вона не використовує субст, відповідає для мене на запитання: "Як зробити SUBST-карти стійкими для перезавантаження?" Не використовуйте subst ... (вставити відповідні "computerName" та "pathName"):

net use u: "\\ computerName \ c $ \ pathName" / стійкий: так

Я адаптував це з пропозиції Хенка Арнольда під час обговорення карти локальних приводів . Я здогадувався, що \\ myComputerName \ c може працювати, але я не знав застосувати $.

Перш ніж спробувати команду "net use", спробуйте перейти до

\\ комп'ютерне ім'я \ c $
щоб переконатися, що у вас є "ComputerName" правильним.


2
Відмінне рішення, хоч і з двома проблемами: 1) його не видно локальній файловій системі, 2) дозволи ...
ashes999

6
якщо ви користуєтесь \\localhost\c$\path\to\thingцим, він переноситься на різних машинах (або оновленнях, що змінюють ім'я комп'ютера). Недоліком використання картографічного накопичувача на Win7 + є те, що до мережевих накопичувачів застосовуються різні політики безпеки, ніж локальні, а деякі програми просто відмовляться від запуску зіставленого диска.
matt wilkie

1
Він бачний у файловій системі, а також у локальній файловій системі - він позначений як мережевий диск, подібно до того, як деякі диски позначені як знімні диски. Це не робить такі диски не частиною або не видною локальної файлової системи - це робить їх мережевими / знімними накопичувачами в локальній файловій системі.
користувач165568

1
Під час тестування я працював над проблемою продуктивності (пару років тому), використовуючи (локально) мережевий накопичувач, також повільніше, ніж безпосередньо використовувати файлову систему (або субст. Тощо). Це не є величезною різницею для невеликих файлів або випадкового використання - не як перехід через фактичну мережу на інший "сервер" - але це важливо.
HerbM

8

Видаліть пакетний файл у папку запуску, яка виконує всі SUBST, які ви хочете зробити.


5

Оскільки оригінальний PSubst має деякі обмеження і, схоже, його автор уклав, мені довелося кодувати нову версію для моїх потреб, виправляючи деякі проблеми та додаючи функціональність та гнучкість.

Перевірте тут пакетний файл PSubst версії 3

https://github.com/cyberponk/psubst

Сумісний з Windows 7, Windows 8, Windows 10, Windows Server 2012

Примітка. Цей твір не має наміру демерікувати оригінального автора, а виник лише через справжню необхідність:

  • Як адміністратор ньюторга, я постійно потребую мережевих накопичувачів SUBST і спілкування з різними користувачами мережі.

  • Оскільки не всі є фахівцями з Windows, я вважав, що автоматичне підвищення адміністрування при роботі з помилками допоможе, грунтуючись на коментарях, які я читаю в Інтернеті.

  • Оскільки деякі люди боролися з порядком аргументів, я вважав, що найкраще сценарій працювати з аргументами в будь-якому порядку.

Я не можу згадати кожен доданий функціонал, але кожне включення робилося суто необхідністю. Я ділюсь кодом, щоб інші не стикалися з проблемами, які у мене виникли. Таким чином, немає іншого наміру, крім спільного використання та надання допомоги.


Будь ласка, кажучи "A", скажіть "B". Ви вважаєте, що у оригінального psubst є багато проблем - будь ласка, вкажіть на них, якщо вони є. З іншого боку, psubst не кидається. Просто досяг межі свого розвитку. Оригінальний інструмент дотримується дуже простої філософії: роби щось і роби добре. Він не перевантажений додатковими функціоналами, такими як робота з UAC та створення додаткового vbs-коду для того, щоб робити щось більше. Одне можна зробити над оригінальним кодом - деякі косметичні зміни для спрощення коду та покращення читабельності.
jsxt

Відредаговано, перегляньте. UAC та vbs призначені для автоматичного підняття адміністратора. Я не погоджуюся з коментарем щодо "межі розвитку", оскільки всі зміни, які я вніс, полягали в тому, щоб зробити використання ще простішим та легшим після того, як я зіткнувся з декількома проблемами з використанням PSUBST. Я не збираюся критикувати оригінального автора, тому не буду перераховувати проблеми, а натомість створив рішення. Я фактично запропонував додати свої видання до оригінальної гілки Github, але я відмовився, тому мені довелося створити власне відділення.
кіберпонк

Дякуємо за ваш швидкий та детальний відгук. Ймовірно, мені потрібно придивитись до вашого розвитку ближче.
jsxt

Мій капелюх знятий до вас; Я провів свій час в траншеях партії, і я знаю, як це боляче. Цей код виглядає досить непогано.
SilverbackNet

2

Я розширюю відповідь davr, тому що будь-які файли, які видаляються із зібраного накопичувача, назавжди видаляються, а не йдуть у кошик. Цей файл REG базується на інформації, зібраній з цієї статті TechNet , в якій розповідається про те, як увімкнути кошик. Приклад відображає вірусний дисковод Q у папку "OneDrive - Test" і вмикає кошик на приводі Q. Змініть шляхи та ім’я відповідно до вашої ситуації.

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

Якщо у вас є лише один подібний відображений привід, ви можете піти з GUID {9147E464-33A6-48E2-A3C9-361EFD417DEF}. Якщо у вас є декілька зіставлених накопичувачів, кожен з них повинен відповідати GUID від вашого улюбленого генератора GUID.


Деякі мої спостереження: якщо ви просто встановите значення під HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{GUID}і перезавантажте, відповідні значення під HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\KnownFolder\{GUID}автоматично генеруються Windows. Нічого не з’явилося для мене під Wow6432Nodeклавішами, але кошик працював без них. Це було в системі Windows 7, тому я не впевнений, чи поводиться він інакше в нових версіях.
Герохтар

1
Просто для додання трохи даних у мене 64-бітна система Win 10, і я перевірив, що сталося при видаленні з 32-розрядного додатка (FastStone Image Viewer), і я виявив, що кошик не працює для 32 -бітовий додаток без клавіш Wow6432Node.
Тоні Пулокас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.