Установщик Windows устанавливается в расположение по умолчанию, даже если выбран другой каталог - PullRequest
1 голос
/ 05 января 2011

Я надеюсь, что на этот вопрос еще не ответили, но я чувствую, что я прочитал каждую связанную статью по всему Интернету ...

Мне нужно, чтобы свойство DefaultLocation установщика по умолчанию было C:\ или D: \ (в идеале здесь должна быть логика, но я уже понял, что это невозможно сделать, потому что пользовательские действия выполняются после установки файлов).

Проблемы, с которыми я сталкиваюсь, заключаются в том, что если яиспользуйте свойство для [TARGETDIR] или [ROOTDRIVE], для которого по умолчанию обычно используется C: \ или D: \, чтобы при выборе пользователем другого места установки программа установки игнорировала выбранное место.

Например, на моей машине [ROOTDRIVE] разрешается в C :.Если я скажу установщику D: \, он все равно установится в C: \.Это происходит как со свойством [TARGETDIR], так и со свойством [ROOTDRIVE].

Кто-нибудь видел это или знает, почему это происходит?

Спасибо, Стив

Ответы [ 2 ]

1 голос
/ 06 января 2011

Вы не хотите устанавливать TARGETDIR, так как по умолчанию это диск с наибольшим объемом свободного места, обычно вы используете что-то вроде INSTALLDIR или APPLICATIONFOLDER, и пользователь вместо этого настраивает это свойство,Пример WiX ниже по умолчанию C:\Program Files\ACME Xyz\My Program, но если пользователь изменит местоположение APPLICATIONFOLDER, чтобы сказать D:\blahblahblah, тогда файлы будут установлены там.

<Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="ProgramFilesFolder">
        <Directory Id="MyCo" Name="ACME Xyz">
            <Directory Id="APPLICATIONFOLDER" Name="My Program" DiskId="1">
            </Directory>
        </Directory>
    </Directory>
</Directory>

EDIT :: В этом случае просто используйте немедленное пользовательское действие.например,

<CustomAction Id="SetInstallFolder" Property="APPLICATIONFOLDER" Value="D:\"  Execute="immediate" />

<InstallExecuteSequence>
    <Custom Action="SetInstallFolder" Before="CostFinalize">ACTION="INSTALL" AND APPLICATIONFOLDER="" AND (ALLUSERS=1 OR (ALLUSERS=2 AND Privileged))</Custom>
</InstallExecuteSequence>
<InstallUISequence>
    <Custom Action="SetInstallFolder" Before="CostFinalize">ACTION="INSTALL" AND APPLICATIONFOLDER="" AND (ALLUSERS=1 OR (ALLUSERS=2 AND Privileged))</Custom>
</InstallUISequence>
0 голосов
/ 15 марта 2011

Я только что понял, ПОЧЕМУ это происходит с установщиком Visual Studio и, что более важно, как это исправить.

Существует свойство «PackageAs», к которому можно получить доступ в Visual Studio для каждого файла, который используется в файле установки. По умолчанию это свойство имеет значение «vsdpaDefault», что на основании небольшой информации, которую я смог раскрыть, приводит к сжатию файла, что, в свою очередь, приводит к изменению файла, а затем и LastModifiedDate.

Эту проблему можно решить, изменив файл, для которого вы хотите сохранить LastModifiedDate, на PackageAs "vsdpaLoose". Это приводит к тому, что файл НЕ сжимается и сохраняет его свойства.

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

...