2010-08-12 1 views
1

Эй У меня есть следующий AppleScript, сохраненный как капелька. Сохраняются на DMG файл как этого http://dl.dropbox.com/u/1839051/TestDMG.dmgAppleScript Droplet на DMG не работает

Проблема, в то время как некоторые из них могут перетащить шаблон на Droplet и он работает, когда я пытаюсь перетащить шаблон на капельку Перечеркнутой circle- появляется символ, указывающий, что это действие невозможно. Ничего не происходит, файл не копируется.

Кто-нибудь есть идеи, почему у меня есть эта проблема и как ее можно исправить? Спасибо заранее, парень.

on open thefiles  
    set outputFolder to (path to application support folder from user domain as text) & "iWork:Pages:Templates:My Templates:" 
    do shell script "/bin/mkdir -p " & quoted form of POSIX path of outputFolder 

    tell application "Finder" 
    duplicate thefiles to outputFolder 
    end tell  
end open 

ответ

1

Вместо того, чтобы использовать капельку и иметь возможность перетаскивать файлы на капельку, почему бы просто не сделать установщик, поэтому пользователю нужно только дважды щелкнуть установщик? Было бы проще и, возможно, избежать вашей проблемы. Я также добавил некоторые ошибки обработки в вашем коде, потому что это просто разумно сделать это с доставкой кода. Мы также сообщаем пользователю, что произошло.

ПРИМЕЧАНИЕ. У вас также была ошибка в коде. OutputFolder - это строка. Для Finder требуется спецификатор файла. Чтобы сделать строку в спецификаторе, вы добавляете либо слово «файл», либо «папка» перед строкой. Возможно, ваш код работал, но правильный способ его записи - со спецификатором. Другие приложения могут не принимать строковый путь, но все они будут принимать спецификатор ... так что привыкайте использовать их вместо строк.

try 
    -- create the output folder if necessary 
    set outputFolder to (path to application support folder from user domain as text) & "iWork:Pages:Templates:My Templates:" 
    do shell script "/bin/mkdir -p " & quoted form of POSIX path of outputFolder 

    -- find the templates on the dmg disk 
    set myPath to path to me 
    tell application "Finder" 
     set myContainer to container of myPath 
     set templateFiles to (files of myContainer whose name extension is "template") as alias list 
    end tell 

    -- copy the templates to the output folder 
    -- NOTE: the script will error if any of the templates already exist 
    -- therefore we use a repeat loop and duplicate each file separately with a try block 
    -- around it to avoid errors in case some templates have already been installed. 
    tell application "Finder" 
     repeat with aTemplate in templateFiles 
      try 
       duplicate aTemplate to folder outputFolder 
      end try 
     end repeat 
    end tell 

    -- tell the user everything was OK 
    tell me to activate 
    display dialog "The templates were successfully installed! You may now use them in Pages." buttons {"OK"} default button 1 with title "Templates Installer" with icon note 
on error 
    tell me to activate 
    display dialog "There was an error installing the templates. Please manually install them by copying them to the following folder." & return & return & (POSIX path of outputFolder) buttons {"OK"} default button 1 with title "Templates Installer" 
end try 
+0

Спасибо. Это был мой первый скрипт с Applescript. Я попробую вашу версию, когда вернусь домой. Я попытался сделать установщик, но я не мог понять, как получить текущий путь в DMG. Спасибо. –

+0

Работает отлично. Большое спасибо. –

1

Это выглядит разрешения вопроса, и я должен задаться вопросом, если разница между теми, кто может и кто не может иметь что-то делать с какой ОС они работают. Я запускаю Mac OS 10.6 в качестве администратора, и мне не удалось выполнить действие в DMG. Но я смог выполнить действие, если я вытащил оба файла из DMG и на свой рабочий стол.

Если вам необходимо установить файлы в определенных местах на жесткий диск для поддержки вашего проекта, я бы рекомендовал сделать установщик (и соответствующий деинсталлятор), а не настройку, которую вы представили.