none
Назначить скриптом приложение на открытие .tif файлов RRS feed

  • Вопрос

  • Добрый день!

    С давних пор в групповых политиках существует следующий скрипт в пользовательском разделе, который принудительно назначает программу Microsoft Office Document Viewer для открытия файлов .tif, .tiff и .mdi. Все это отлично работало на XP и 2003.

    Dim WshShell
    Set WshShell = WScript.CreateObject("WScript.Shell")
    
    WshShell.RegWrite  "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\", ".tif"
    WshShell.RegWrite  "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif\Progid", "MSPaper.Document", "REG_SZ"
    WshShell.RegWrite  "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\", ".tiff"
    WshShell.RegWrite  "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tiff\Progid", "MSPaper.Document", "REG_SZ"
    WshShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\", ".mdi"
    WshShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mdi\Progid", "MSPaper.Document", "REG_SZ"

    Теперь появился новый сервер на 2008 R2 и этот скрипт перестал работать! Я так понимаю, что поменялся механизм сопоставления программ файлу и теперь появилась дополнительная папка UserChoice, в которой и прописывается соответствие, выбранное пользователем, и, которое мне нужно заменить.

    Переделать скрипт - запросто, но проблема в том, что по умолчанию у этого ключа реектра у пользователей нет права на редактирование, а скрипт при входе в систему запускается от их учетки. Получается, что я никак не могу скриптом переназначить соответствие.

    Подскажите, возможно ли как-то учесть права доступа при редактировании реестра скриптом? Или быть может есть другие варианты назначения соответствия программ скриптом в обход редактирования реестра?
    29 января 2010 г. 13:33

Ответы

  • Недавно решал подобную задачу.
    http://rudykh.blogspot.com/2010/01/blog-post.html

    Спасибо. Именно таким же путем шел и я, все перепробовал. Но я решил, что пользователи не могут удалить ключ в реестре, поэтому у них и скрипт ошибкой завершается. А оказалось, что ошибка возникает при удалении несуществующего ключа. Не знал об этом, так как до этого использовал другой способ редактирования реестра, в котором не возникало ошибки при удалении несуществующего ключа. Добавил операторы исключения и все ошибки пропали. Окончательный скрипт прилагаю. Кстати, советую мой вариант, без всяких REG файликов.

    Dim WshShell
    Set WshShell = WScript.CreateObject("WScript.Shell")
    
    On Error Resume Next
    
    WshShell.RegWrite  "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif\Progid", "MSPaper.Document", "REG_SZ"
    WshShell.RegDelete "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif\UserChoice\"
    WshShell.RegWrite  "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif\", "UserChoice"
    WshShell.RegWrite  "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif\UserChoice\Progid", "MSPaper.Document", "REG_SZ"
    
    WshShell.RegWrite  "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tiff\Progid", "MSPaper.Document", "REG_SZ"
    WshShell.RegDelete "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tiff\UserChoice\"
    WshShell.RegWrite  "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tiff\", "UserChoice"
    WshShell.RegWrite  "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tiff\UserChoice\Progid", "MSPaper.Document", "REG_SZ"
    
    WshShell.RegWrite  "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mdi\Progid", "MSPaper.Document", "REG_SZ"
    WshShell.RegDelete "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mdi\UserChoice\"
    WshShell.RegWrite  "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mdi\", "UserChoice"
    WshShell.RegWrite  "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mdi\UserChoice\Progid", "MSPaper.Document", "REG_SZ"
    
    Err.Clear
    • Помечено в качестве ответа Bonov 2 февраля 2010 г. 15:20
    2 февраля 2010 г. 15:19

Все ответы

  • >Переделать скрипт - запросто, но проблема в том, что по умолчанию у этого ключа реектра у пользователей нет >права на редактирование, а скрипт при входе в систему запускается от их учетки. Получается, что я никак не могу >скриптом переназначить соответствие.

    если это так на самом деле, то что вам мешает поправить разрешения на ветки реестра через те же самые групповые политики?

    а, вообще, всю жисть для ваших целей были предназначены команды
    ftype /?
    assoc /?


    не знаю, что с ними стало на 2k8, пробуйте...
    29 января 2010 г. 15:07
  • А еще я бы порекомендовал посмотреть в сторону GPP раз уж КД на 2008R2 стоит :) хотя оно же и на 2003 было
    1 февраля 2010 г. 2:48
  • Посмотрел команды ftype и assoc. Assoc - вроде то, что нужно, но работает она некорректно, не отображает уже имеющееся соответствие, а при попытке назначить тоже выдает ошибку доступа.

    Контроллер домена на 2003R2, а не на 2008, 2008R2 - единственный новый сервер, на котором запущен терминал. Как можно решить вопрос групповыми политиками? Настройка прав на реестр есть только в конфигурации компьютера, а папка UserChoice создается у каждого пользователя. И даже при создании ключа в GPP в настройках компьютера, я там не могу выбрать соответственно CURRENT USER.
    2 февраля 2010 г. 12:58
  • текущий пользователь является членом группы локальные администраторы?

    2 февраля 2010 г. 14:02
  • текущий пользователь является членом группы локальные администраторы?


    Это к чему вопрос? Если под текущим пользователем понимать того, для кого должно назначаться соответствие, то конечно же нет, а соответствие могут быть индивидуальными в разрезе пользователей, т.к. они сами для себя это соответствие могут менять. Мое дело - это исправлять всегда на правильное.
    Если вопрос про запуск утилиты assoc, то я запускал ее из командной строки. Сначала без прав админа, поскольку нужно менять ассоциации в профиле пользователя, который никакими правами не обладает - выдавалась ошибка. Под админом соответствие устанавливается, НО файл все равно открывается не той программой, которую указываешь в утилите, не смотря на то, что после повторного запуска утилиты Assoc с выводом установленных параметров - все ОК.
    2 февраля 2010 г. 14:33
  • Недавно решал подобную задачу.
    http://rudykh.blogspot.com/2010/01/blog-post.html
    2 февраля 2010 г. 14:36
  • Недавно решал подобную задачу.
    http://rudykh.blogspot.com/2010/01/blog-post.html

    Спасибо. Именно таким же путем шел и я, все перепробовал. Но я решил, что пользователи не могут удалить ключ в реестре, поэтому у них и скрипт ошибкой завершается. А оказалось, что ошибка возникает при удалении несуществующего ключа. Не знал об этом, так как до этого использовал другой способ редактирования реестра, в котором не возникало ошибки при удалении несуществующего ключа. Добавил операторы исключения и все ошибки пропали. Окончательный скрипт прилагаю. Кстати, советую мой вариант, без всяких REG файликов.

    Dim WshShell
    Set WshShell = WScript.CreateObject("WScript.Shell")
    
    On Error Resume Next
    
    WshShell.RegWrite  "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif\Progid", "MSPaper.Document", "REG_SZ"
    WshShell.RegDelete "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif\UserChoice\"
    WshShell.RegWrite  "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif\", "UserChoice"
    WshShell.RegWrite  "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif\UserChoice\Progid", "MSPaper.Document", "REG_SZ"
    
    WshShell.RegWrite  "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tiff\Progid", "MSPaper.Document", "REG_SZ"
    WshShell.RegDelete "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tiff\UserChoice\"
    WshShell.RegWrite  "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tiff\", "UserChoice"
    WshShell.RegWrite  "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tiff\UserChoice\Progid", "MSPaper.Document", "REG_SZ"
    
    WshShell.RegWrite  "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mdi\Progid", "MSPaper.Document", "REG_SZ"
    WshShell.RegDelete "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mdi\UserChoice\"
    WshShell.RegWrite  "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mdi\", "UserChoice"
    WshShell.RegWrite  "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mdi\UserChoice\Progid", "MSPaper.Document", "REG_SZ"
    
    Err.Clear
    • Помечено в качестве ответа Bonov 2 февраля 2010 г. 15:20
    2 февраля 2010 г. 15:19