Можно использовать new Date().getTimezoneOffset()/60
для часового пояса. Существует также toLocaleString()
метод для отображения даты с помощью локали пользователя.
Вот целый список: Работа с Датами
Из темы msdn на упорядочивание настраиваемых действий :
Как и в случае стандартных действий, настраиваемые действия, запланированные в InstallUISequence или AdminUISequence запускается, только если внутренний пользовательский интерфейс настроен на full level.
So I guess your custom action is scheduled in a UI sequence, not in InstallExecuteSequence
. Try scheduling your custom action in the InstallExecuteSequence
like this:
<InstallExecuteSequence>
<Custom Action='LaunchApplication' After='InstallFiles'/>
</InstallExecuteSequence>
where "LaunchApplication" should be replaced by the Id
of your CustomAction
element.
edit: I looked at the instructions that you followed, and I don't see the custom action for launching the application being scheduled in any sequence. It is only triggered from a UI action (clicking the Finish button). This explains why it is never executed during a silent install.
edit: full sample (it's a bit sloppy as it also tries to execute the custom action on uninstall, repair etc. but for some reason I couldn't get the "NOT Installed" condition to work)
<?xml version='1.0' encoding='utf-8'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
<Product
Name='ProductName'
Id='*'
Language='1033'
Version='0.0.1'
Manufacturer='ManufacturerName' >
<Package
Keywords='Installer'
Description='Launch application demo'
Manufacturer='ManufactererName'
InstallerVersion='100'
Languages='1033'
Compressed='yes'
SummaryCodepage='1252'/>
<Media Id='1' Cabinet='test.cab' EmbedCab='yes'/>
<Directory Id='TARGETDIR' Name="SourceDir">
<Directory Id='ProgramFilesFolder'>
<Directory Id='TestFolder' Name='Test' >
<Component Id="ExeComponent" Guid="*">
<File Id="ExeFile" Source="c:\windows\notepad.exe" />
</Component>
</Directory>
</Directory>
</Directory>
<Feature Id='Complete'
Display='expand'
Level='1'
Title='Test'
Description='Test'>
<ComponentRef Id="ExeComponent" />
</Feature>
<InstallExecuteSequence>
<Custom Action='LaunchInstalledExe' After='InstallFinalize'/>
</InstallExecuteSequence>
<CustomAction Id="LaunchInstalledExe"
FileKey="ExeFile"
ExeCommand=""
Execute="immediate"
Impersonate="yes"
Return="asyncNoWait" />
</Product>
</Wix>
Я предполагаю, что вы запускаете приложение из настраиваемого действия, которое запускается через свойство, привязанное к флажку. В этом случае вы можете попробовать указать это свойство в качестве аргумента командной строки для setup.exe. Скажем, если ваше настраиваемое действие привязано к свойству MSI LAUNCH_NEW_VERSION, вы можете вызвать setup.exe следующим образом:
setup.exe /q LAUNCH_NEW_VERSION=1
Стандартный установочный загрузчик должен передать это свойство / значение механизму MSI. В противном случае вы можете рассмотреть возможность прямого вызова .msi вместо вызова bootstrapper exe для запуска вашего установщика.
В моем окончательном решении я использовал два свойства, одно для пользовательского интерфейса ( LAUNCH_APP_ON_EXIT ), другое для аргументов командной строки ( UPDATING_AUTOMATICALLY ).
Я должен это сделать, потому что если я запустил CustomAction после InstallFinalize в полном режиме пользовательского интерфейса, приложение запустится до , вы нажмете кнопку «Готово» .
Теперь я могу вызвать настройку. ехе / дп UPDATING_AUTOMATICALLY = 1 в моей программе для обновления
Вот все это:.
<Property Id="LAUNCH_APP_ON_EXIT" Value="1" />
<Property Id="UPDATING_AUTOMATICALLY" Value ="0" />
<CustomAction Id="LaunchApplication" FileKey="mainExecutableFile" ExeCommand="" Execute="immediate" Impersonate="yes" Return="asyncNoWait" />
<UI>
<!-- explainations: http://www.dizzymonkeydesign.com/blog/misc/adding-and-customizing-dlgs-in-wix-3/ -->
<UIRef Id="MyWixUI_InstallDir" />
<UIRef Id="WixUI_ErrorProgressText"/>
<Publish Dialog="MyExitDialog" Control="Finish" Order="1" Event="DoAction" Value="LaunchApplication">LAUNCH_APP_ON_EXIT</Publish>
</UI>
<InstallExecuteSequence>
<Custom Action='LaunchApplication' After='InstallFinalize'>UPDATING_AUTOMATICALLY = 1</Custom>
</InstallExecuteSequence>
Это подход, который я использовал.
<Property Id="WixShellExecTarget" Value="[#(the id of your exe here)]" />
<CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />
Он выполнит, какой идентификатор файла вы введете в Value. [# ] необходимо. Я использовал это и прогнал его через пользовательский интерфейс, но вы должны быть в состоянии вызвать это пользовательское действие в любом месте, и оно работает.
.