Делаем лаунчер приложений

Итак, я хочу сделать приложение, которое запускает другие приложения. Однако цель здесь состоит в том, чтобы сделать приложение «портативным» в том смысле, что я могу переходить с одного рабочего стола Windows на другой, используя одно и то же приложение с USB-накопителя. Итак, вот другое краткое изложение того, что я имею в виду:

У меня есть приложение X. Я использую его на машине 1 и хочу использовать его на машине 2. Однако машина 2 принадлежит моему приятелю, и он не хочет, чтобы я что-то на нее устанавливал. Итак, я беру все файлы, которые установщик сделал в моей системе, и раскладываю по папкам. Приложение X помещает файлы в папку Windows, которую оно ожидает при запуске. Если я просто запущу приложение и оно посмотрит в каталоге Windows, оно не найдет файлы. У меня нет/не нужна возможность помещать файлы в каталог Windows. Я хочу сказать приложению искать в папке a файлы в папке b, а не там, где оно обычно выглядит. Затем я мог использовать эту программу на любой машине, не изменяя ее каким-либо образом.

Это выполнимо? Если да, то как он называется, чтобы я мог его посмотреть?

РЕДАКТИРОВАТЬ: win dir был примером. Я хотел бы, чтобы приложение было самодостаточным в папке на флэш-накопителе. Я хочу перенаправить то, где приложение ищет файлы, в указанную мной папку.


person sobertillnoon    schedule 29.08.2009    source источник


Ответы (2)


Это можно сделать, но насколько легко это будет полностью зависеть от программы, которую вы запускаете.

Типы вещей, которые будут делать приложения:

  • Просто запустите с радостью исполняясь где угодно (без зависимостей). Это очень легко!

  • Требуется настроить некоторые переменные среды. Это легко сделать — при желании вы можете запустить новый процесс с измененным окружением.

  • Чтение файлов с диска. Обычно при загрузке таких вещей, как .dll, приложения будут искать dll в PATH, поэтому их можно скопировать в папку приложения (рядом с .exe), и они будут успешно работать в любой системе. Однако в некоторых случаях приложения будут использовать фиксированные (или, по крайней мере, менее гибкие) пути, поэтому их будет сложнее успешно запустить.

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

В конечном счете вам нужно будет выяснить для каждого приложения, которое вы хотите запустить, что именно ему нужно для запуска.

Если приложения являются коммерческими, будьте осторожны, чтобы не нарушить какие-либо условия лицензирования (EULA), запуская их таким образом.

Другой альтернативой может быть установка образа виртуального ПК и простое его выполнение на хост-ПК, поэтому не нужно беспокоиться о каких-либо особых случаях для каждого приложения. В зависимости от имеющегося у вас программного обеспечения VPC вам может потребоваться установить программное обеспечение на хост-компьютер, чтобы разрешить запуск сеанса виртуального ПК, что может противоречить цели / намерению.

person Jason Williams    schedule 29.08.2009
comment
Спасибо. У меня возникли проблемы с поиском информации о выполнении процесса с измененной средой. - person sobertillnoon; 30.08.2009
comment
Это зависит от языка, который вы используете. Например, из C++ используйте CreateProcess() для запуска процесса, передавая любые переменные среды, которые вам нужны, в lpEnvironment. См. msdn.microsoft.com/en-us/library/ ms682425(VS.85).aspx . В C#/VB используйте System.Diagnostics.Process.Start, передав ProcessStartInfo (который включает переменные среды): msdn.microsoft.com/en-us/library/0w4h05yb.aspx - person Jason Williams; 30.08.2009
comment
И с коляской lpEnvironment я могу сказать, что %windir=c:\fakewindir - person sobertillnoon; 30.08.2009
comment
Вы можете, но маловероятно, что какие-либо приложения примут какое-либо уведомление об этом конкретном изменении. Однако вы можете изменить такие вещи, как PATH (папки, которые ищутся для загрузки dll), чтобы добавить свои собственные локальные папки перед папками по умолчанию, и многие приложения предоставляют свои собственные настраиваемые переменные среды (например, MAYA_PLUGIN_PATH от Autodesk Maya), которые могут быть используется для настройки их поведения. Во многих случаях вам нужно будет найти конкретные хаки, которые требуются для отдельного приложения - это ни в коем случае не универсальное решение. - person Jason Williams; 30.08.2009

Я думаю, что система, которую вы описываете, это U3 (дополнительная информация на http://en.wikipedia.org/wiki/U3). Это требует, чтобы приложение следовало протоколу U3, но если приложение это делает, то его можно запустить с флэш-накопителя U3 без каких-либо разрешений на установку или администрирование, необходимых на хост-компьютере.

Это запатентованная технология, и ее поддерживают лишь несколько поставщиков, которых я видел.

Если вам действительно нужна портативность и мощность, рассмотрите возможность использования VMWare Player и переносите всю машину, настроенную в соответствии с вашими потребностями, на флэш-накопитель. Конечно, вашему другу, вероятно, придется разрешить вам установить VMWare Player.

person Jason R. Coombs    schedule 29.08.2009