воскресенье, 6 ноября 2011 г.

Возможность запуска на клиентской машине скриптов, написанных на F#

Мне потребовалось, чтобы все пользователи домена могли запускать на своих машинах скрипты, написанные мною на F# (fsx-файлы). Для этого на всех локальных машинах придётся установить F# 2.0, поскольку на сегодняшний день, к сожалению, необходимый под это дело функционал не входит в состав .Net Framework, а поставляется отдельно. Если на компьютере установлена MS Visual Studio 2010, то необходимости в данном msi-пакете нет, поскольку она устанавливает всё что требуется, но у рядовых пользователей, понятное дело, IDE не установлена.

Обязательное условие: у пользователей на компьютерах должен быть установлен .NET Framework 2.0 (либо 3.0, либо 3.5 SP1, которые фактически основаны на версии 2.0).
К сожалению, в указанном мною выше msi-пакете есть неприятный изъян - настройки применяются лишь к тому профилю, из под которого данный пакет устанавливался (т.е. к профилю администратора), а это не есть "гуд"... Проверку я выполнял в Windows XP SP3 x86 и в Windows 7 SP1 x86. Для наглядности показываю скрины... Итак, устанавливал ПО под админом, после чего в этом виндовом профиле картина выглядит так, как и ожидалось:

Т.е. видим, что с fsx-файлом ассоциирована некоторая иконка, а в контекстное меню добавлен пункт запуска скрипта на исполнение. А теперь заходим под другим профилем Windows и видим неприятную картину:

Необходимо внести в реестр некоторые изменения, благодаря которым "счастье" станет доступно и для "простых смертных": в ветке HKEY_LOCAL_MACHINE нужно разместить часть той информации, которую  msi-пакет разместил в ветке HKEY_CURRENT_USER.

Содержимое reg-файла у меня получилось таким:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\Software\Classes\.fsx]
@="VisualStudio.fsx.9.0"
"Content Type"="application/fsharp-script"
[HKEY_LOCAL_MACHINE\Software\Classes\VisualStudio.fsscript.10.0]
@="Visual F# Script file"
[HKEY_LOCAL_MACHINE\Software\Classes\VisualStudio.fsscript.10.0\DefaultIcon]
@="\"C:\\Program Files\\FSharp-2.0.0.0\\v4.0\\bin\\FSharp.ProjectSystem.FSharp.dll\",2"
[HKEY_LOCAL_MACHINE\Software\Classes\VisualStudio.fsscript.10.0\shell]
[HKEY_LOCAL_MACHINE\Software\Classes\VisualStudio.fsscript.10.0\shell\open]
@="Open"
[HKEY_LOCAL_MACHINE\Software\Classes\VisualStudio.fsscript.10.0\shell\open\command]
@="\"\" \"%1\""
[HKEY_LOCAL_MACHINE\Software\Classes\VisualStudio.fsscript.9.0]
@="Visual F# Script file"
[HKEY_LOCAL_MACHINE\Software\Classes\VisualStudio.fsscript.9.0\DefaultIcon]
@="\"C:\\Program Files\\FSharp-2.0.0.0\\bin\\FSharp.ProjectSystem.FSharp.dll\",2"
[HKEY_LOCAL_MACHINE\Software\Classes\VisualStudio.fsscript.9.0\shell]
[HKEY_LOCAL_MACHINE\Software\Classes\VisualStudio.fsscript.9.0\shell\open]
@="Open"
[HKEY_LOCAL_MACHINE\Software\Classes\VisualStudio.fsscript.9.0\shell\open\command]
@="\"\" \"%1\""
[HKEY_LOCAL_MACHINE\Software\Classes\VisualStudio.fsscript.9.0\shell\openRunFsi]
@="Run with F# Interactive"
[HKEY_LOCAL_MACHINE\Software\Classes\VisualStudio.fsscript.9.0\shell\openRunFsi\command]
@="\"C:\\Program Files\\FSharp-2.0.0.0\\bin\\fsi.exe\" --quiet --exec \"%1\""
[HKEY_LOCAL_MACHINE\Software\Classes\VisualStudio.fsx.10.0]
@="Visual F# Script file"
[HKEY_LOCAL_MACHINE\Software\Classes\VisualStudio.fsx.10.0\DefaultIcon]
@="\"C:\\Program Files\\FSharp-2.0.0.0\\v4.0\\bin\\FSharp.ProjectSystem.FSharp.dll\",2"
[HKEY_LOCAL_MACHINE\Software\Classes\VisualStudio.fsx.10.0\shell]
[HKEY_LOCAL_MACHINE\Software\Classes\VisualStudio.fsx.10.0\shell\open]
@="Open"
[HKEY_LOCAL_MACHINE\Software\Classes\VisualStudio.fsx.10.0\shell\open\command]
@="\"\" \"%1\""
[HKEY_LOCAL_MACHINE\Software\Classes\VisualStudio.fsx.9.0]
@="Visual F# Script file"
[HKEY_LOCAL_MACHINE\Software\Classes\VisualStudio.fsx.9.0\DefaultIcon]
@="\"C:\\Program Files\\FSharp-2.0.0.0\\bin\\FSharp.ProjectSystem.FSharp.dll\",2"
[HKEY_LOCAL_MACHINE\Software\Classes\VisualStudio.fsx.9.0\shell]
[HKEY_LOCAL_MACHINE\Software\Classes\VisualStudio.fsx.9.0\shell\open]
@="Open"
[HKEY_LOCAL_MACHINE\Software\Classes\VisualStudio.fsx.9.0\shell\open\command]
@="\"\" \"%1\""
[HKEY_LOCAL_MACHINE\Software\Classes\VisualStudio.fsx.9.0\shell\openRunFsi]
@="Run with F# Interactive"
[HKEY_LOCAL_MACHINE\Software\Classes\VisualStudio.fsx.9.0\shell\openRunFsi\command]
@="\"C:\\Program Files\\FSharp-2.0.0.0\\bin\\fsi.exe\" --quiet --exec \"%1\""

Файл писался под Windows XP SP3 x86,  поскольку мои пользователи используют именно её. Я протестировал его и под Windows 7 SP1 x86 - всё отработало как нужно.  Под другие версии ОС я reg-файл не тестировал.
Всё... Запускаем этот файл на исполнение и проблема решена:




Комментариев нет: