WiX Burn bootstrapper cancel dialog localization - localization

I have successfuly created a localized installer and bootstrapper setup using WiX. There is just one problem with the bootstrapper localization. Everything is fine except the values of button captions in a dialog that appears when the installation is being canceled (exit confirmation yes/no). There are no string elements in the bootstrapper theme wxl files that would allow to change these values. In the MSI installer this was possible by setting "WixUIYes", "WixUINo" values.
I have tried to add the following elements to my localized theme file, but without success.
<String Id="WixUIYes" Overridable="yes">some_value1</String>
<String Id="WixUINo" Overridable="yes">some_value2</String>
Is there a way to change the caption values of mentioned buttons? Their values are currently in the system language.
This is my WXS file:
<?xml version='1.0' encoding='windows-1250'?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">
<Bundle Name="Test" Version="1.0.0.0" UpgradeCode="MY-GUID">
<WixVariable Id="WixStdbaThemeXml"
Value="Resources\HyperlinkTheme.xml" />
<WixVariable Id="WixStdbaThemeWxl"
Value="Resources\LocalizedHyperlinkTheme.wxl" />
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.HyperlinkLicense" >
<bal:WixStandardBootstrapperApplication LicenseUrl="" SuppressOptionsUI="yes" />
</BootstrapperApplicationRef>
<Chain>
<ExePackage Id="VCRedistExe"
Cache="no"
Compressed="no"
Vital="yes"
SourceFile="vcredist_x86.exe" />
<MsiPackage Id="MyAppMsi"
Cache="no"
Compressed="yes"
Vital="yes"
SourceFile="MyApp.msi"
DisplayInternalUI="yes" />
</Chain>
</Bundle>
</Wix>

Related

Checkbox control in TFS witcommand

I have a custom TFS form. In this form i need to add a check box as
Select test:
Test1
Test2
Test3
Test1, Test2 and Test3 should be check box controls and the user can select any number of check boxes. How can I achieve this in TFS? I installed a code plex project http://witcustomcontrols.codeplex.com/
But there is no documentation on how I can use the controls or samples.
The download file from http://witcustomcontrols.codeplex.com/ contains an installer for the Windows controls and a .zip file for the Web Access controls.
To install windows control:
Simply run the msi setup and restart Visual Studio.
Fields associated with multivalue control should have list of suggested values and each value enclosed in square brackets. For example:
<FIELD name="Triage" refname="Microsoft.VSTS.Common.Triage" type="String" reportable="dimension">
<HELPTEXT>Status of triaging the bug</HELPTEXT>
<SUGGESTEDVALUES expanditems="false">
<LISTITEM value="[Approved]" />
<LISTITEM value="[Investigate]" />
<LISTITEM value="[Rejected]" />
<LISTITEM value="[Submit]" />
</SUGGESTEDVALUES>
</FIELD>
Then use MultiValueControl as controltype for that field in Form section, for example:
<Control Type="MultiValueControl" FieldName="Microsoft.VSTS.Common.Triage" Label="Triag&e:" LabelPosition="Left" />
Check: http://witcustomcontrols.codeplex.com/wikipage?title=MultiValue%20Control
To install web control:
Navigate in your browser to the configuration panel for the web
extension of TFS: http://servername:8080/tfs/_admin/_extensions
Click on the Install and upload the CodePlex.WitCustomControls.MultiValueControl.zip-file, make
sure to use the .zip file matching you TFS server version.
Enable the extension.
Check: http://witcustomcontrols.codeplex.com/releases/view/616048
As of the recent release of TFS 2015 Update 2, this can be done with the witd in on-prem TFS like this (example is from a Bug).
Definition:
<FIELD name="CustomerReported" refname="X.X.CustomerReported" type="Boolean" reportable="dimension">
<DEFAULT from="value" value="True" />
</FIELD>
Layout:
<Control FieldName="X.X.CustomerReported" Type="FieldControl" Label="Customer Reported" LabelPosition="Left" />

Cordova Tools for VS 2005: iOS app does not display splashscreen and icons

Using VS 2013 Cordova Tools (the current version), my iOS app does not display the given splashscreen and icons unless I set <icon> and <splashscreen> elements in config.xml. However, when config.xml is edited using the visual editor, it simply deletes all <icon> and <splashscreen> elements. Am I missing something?
Obs: icons and splash screen works for android apps out of the box, it just does not work for iOS.
Unfortunately this is a known issue when using the latest version of vs-mda-remote with VS 2013.
You should be able to add this XML to config.xml via Right-Click > View Code to resolve the issue.
<platformname="ios">
<iconsrc="res/icons/ios/icon-60-3x.png"width="180"height="180" />
<iconsrc="res/icons/ios/icon-60.png"width="60"height="60" />
<iconsrc="res/icons/ios/icon-60-2x.png"width="120"height="120" />
<iconsrc="res/icons/ios/icon-76.png"width="76"height="76" />
<iconsrc="res/icons/ios/icon-76-2x.png"width="152"height="152" />
<iconsrc="res/icons/ios/icon-40.png"width="40"height="40" />
<iconsrc="res/icons/ios/icon-40-2x.png"width="80"height="80" />
<iconsrc="res/icons/ios/icon-57.png"width="57"height="57" />
<iconsrc="res/icons/ios/icon-57-2x.png"width="114"height="114" />
<iconsrc="res/icons/ios/icon-72.png"width="72"height="72" />
<iconsrc="res/icons/ios/icon-72-2x.png"width="144"height="144" />
<iconsrc="res/icons/ios/icon-small.png"width="29"height="29" />
<iconsrc="res/icons/ios/icon-small-2x.png"width="58"height="58" />
<iconsrc="res/icons/ios/icon-50.png"width="50"height="50" />
<iconsrc="res/icons/ios/icon-50-2x.png"width="100"height="100" />
</platform>
<platformname="ios">
<splashsrc="res/screens/ios/screen-iphone-portrait.png"width="320"height="480" />
<splashsrc="res/screens/ios/screen-iphone-portrait-2x.png"width="640"height="960" />
<splashsrc="res/screens/ios/screen-ipad-portrait.png"width="768"height="1024" />
<splashsrc="res/screens/ios/screen-ipad-portrait-2x.png"width="1536"height="2048" />
<splashsrc="res/screens/ios/screen-ipad-landscape.png"width="1024"height="768" />
<splashsrc="res/screens/ios/screen-ipad-landscape-2x.png"width="2048"height="1536" />
<splashsrc="res/screens/ios/screen-iphone-568h-2x.png"width="640"height="1136" />
<splashsrc="res/screens/ios/screen-iphone-portrait-667h.png"width="750"height="1334" />
<splashsrc="res/screens/ios/screen-iphone-portrait-736h.png"width="1242"height="2208" />
<splashsrc="res/screens/ios/screen-iphone-landscape-736h.png"width="2208"height="1242" />
</platform>
More known issues: https://www.visualstudio.com/explore/cordova-known-issues-vs
I had similar problem. I simply didn't use graphical config editor and use only text one.
However, the Visual Studio 2015 RC fixes this problem and there is an implicit configuration for every icon and splash screen.

wix internall strings cannot be localize

Wix I18n Dev.The version of wixtoolset is V3.7.
And the Installer UI is created by UIExtension.
In the installation process, there are some UI strings cannot be localized. Such as "Copying new files" and so on. I searched these strings and there are laid in the wix source code(wix37-sources\src\ext\UIExtension\wixlib\WixUI_en-us.wxl), and wix has localized these strings.
It's confusing to me that wix has localized these strings, but it still displayed as English in the installation process. Even I replaced there strings in .wxl file ,it still displayed as English strings.
I tried the example of BdN3504.
the wxs file is the same as BdN3504.
the wxl file is
and you can see the status is still keep English.
My build environment is VS2010 & wix3.7. I don't know what's wrong with it....
I already answered this question here.
Either read that or check out the paragraph called Progress Bar Messages in Nick Ramirez' book WiX 3.6: A Developer's Guide to Windows.
The good people of packtpublishing are offering the chapter of his book containing that paragraph for free here:
Chapter 12: Localizing Your Installer. See page 329.
Another page of interest is this MSDN article: Standard Actions Reference which is also noted in the book.
Edit: Because of the comments I will post a working minimal example and a screenshot, so you see that it works:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="LocalizingErrors" Language="1034" Version="1.0.0.0" Manufacturer="SomeOne" UpgradeCode="7ddbcad4-98d9-4c2d-9ae6-6fdc47314947">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MediaTemplate EmbedCab="no" />
<Feature Id="ProductFeature" Title="LocalizingErrors" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature>
<!-- Custom Progress messages
Custom progress messages are defined by a table in the MSI called ActionText. However, by default
this table isn't included. Without it, the messages are the stock English versions.
To add the ActionText table with strings for progress messages, add a ProgressText element inside
a UI element for each standard action found in the Execute sequence. For example, to add a
localized message for the InstallFiles action, add the following markup to one of your wxs files:
-->
<UI>
<ProgressText Action="InstallFiles" Template="!(loc.InstallFilesTemplate)">!(loc.InstallFiles)</ProgressText>
<ProgressText Action="CreateShortcuts" Template="!(loc.CreateShortcutsTemplate)">!(loc.CreateShortcuts)</ProgressText>
<ProgressText Action="WriteRegistryValues" Template="!(loc.WriteRegistryValuesTemplate)">!(loc.WriteRegistryValues)</ProgressText>
<ProgressText Action="RegisterUser" Template="!(loc.RegisterUserTemplate)">!(loc.WriteRegistryValues)</ProgressText>
<ProgressText Action="RegisterProduct" Template="!(loc.RegisterProductTemplate)">!(loc.RegisterProduct)</ProgressText>
<ProgressText Action="PublishFeatures" Template="!(loc.PublishFeaturesTemplate)">!(loc.PublishFeatures)</ProgressText>
<ProgressText Action="PublishProduct" Template="!(loc.PublishProductTemplate)">!(loc.PublishFeatures)</ProgressText>
<ProgressText Action="InstallFinalize" Template="!(loc.InstallFinalizeTemplate)">!(loc.InstallFinalize)</ProgressText>
</UI>
<UIRef Id="WixUI_Minimal"/>
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="LocalizingErrors" />
</Directory>
</Directory>
</Fragment>
<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<Component Id="ProductComponent" Guid="92A175A0-D15D-48EC-B2E1-FD5848FB6430">
<File Id="somefile" Source="..\File.exe" KeyPath="yes" />
</Component>
</ComponentGroup>
</Fragment>
</Wix>
Accompanying this example, you have to have a localisation file for your Culture. You have to set the Culture in the project properties under Build->Cultures to build. In my case I named it es-es.wxl and the file contents follow:
<?xml version="1.0" encoding="utf-8"?>
<WixLocalization Culture="es-es" xmlns="http://schemas.microsoft.com/wix/2006/localization" Codepage="1252" Language="1034">
<String Id="Error_1311">Archivo no encontrado: [2]. Compruebe que el archivo existe y que puedes acceder a él.</String>
<String Id="InstallFiles">Installazione del archivos</String>
<String Id="InstallFilesTemplate">Archivo: [1], Tamaño de archivo: [6], Directorio: [9]</String>
<String Id="CreateShortcuts">Creacion de los atajos</String>
<String Id="CreateShortcutsTemplate">Atajo [1] creado</String>
<String Id="WriteRegistryValues">Escribir en registro</String>
<String Id="WriteRegistryValuesTemplate">Camino: [1], Nombre: [2], valor: [3]</String>
<String Id="RegisterUser">Registrar a los usuarios</String>
<String Id="RegisterUserTemplate">Usario: [1]</String>
<String Id="RegisterProduct">Registrar producto</String>
<String Id="RegisterProductTemplate">Producto: [1]</String>
<String Id="PublishFeatures">Publicar las características</String>
<String Id="PublishFeaturesTemplate">Caraterística: [1]</String>
<String Id="PublishProduct">Publicar el producto</String>
<String Id="PublishProductTemplate">Producto: [1]</String>
<String Id="InstallFinalize">Finalizar la instalación</String>
<String Id="InstallFinalizeTemplate">Finalizar [ProductName]</String>
</WixLocalization>
Lastly a Screenshot to show you that it works:
Another edit: To localize error strings, you simply have to define Error elements with the corresponding error numbers:
<UI>
<Error Id="1322">Una parte de la ruta de la carpeta no es válido. Se está vacío o supera la longitud permitida por el sistema.</Error>
<Error Id="1311">!(loc.Error_1311)</Error>
</UI>
The first error string is hard-coded, so that's not such a good solution. It's better to use localization files, as it is done in the second Error element.

Log4Net only logging when browsing from localhost

I've used Log4Net in multiple applications for a while. It has been working fine, but recently I noticed that the applications were suddenly not logging anymore. Turns out this issue is the same for all my applications, and they all suddenly stopped logging some months ago. The strange thing is that the logging works when I access the applications directly on the server (http://localhost/myApp), while nothing is logged when I access the application from another PC. My first thought was that it must be related to file/folder permissions, but allowing "Everyone" (Windows user group) full access to the log folder did not help.
They are all ASP.Net MVC 4 applications running on IIS7 (Windows 2008 R2 Enterprise OS), and the application pool is using "ApplicationPoolIdentity". Log4Net version is 1.2.10.0 and I am using a custom CompositeRollingFileAppender. I thought it may have been something wrong with the custom appender, but the problem remained the same when I tried switching to the standard RollingFileAppender. I've seen the issue on multiple servers.
Has anyone seen something similar? Please share your thoughts, as I cannot see why there should be any difference in accessing the applications locally or remotly.
Here is the log4net section in one of my applications' web.config:
<log4net>
<appender name="RollingFileAppender" type="[mynamespace].CompositeRollingFileAppender">
<file value="Logs/ApplicationLog.log" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<maxSizeRollBackups value="20" />
<maximumFileSize value="10MB" />
<datePattern value="_yyyy-MM-dd" />
<staticLogFileName value="true" />
<preserveLogFileNameExtension value="true" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%utcdate;%property{ErrorCode};%property{Severity};%property{ErrorName};%property{Module};%m%n" />
</layout>
</appender>
<root>
<priority value="ALL" />
<appender-ref ref="RollingFileAppender" />
<level value="Warn" />
</root>
<logger name="NHibernate">
<level value="OFF" />
</logger>
<logger name="NHibernate.SQL">
<level value="OFF" />
</logger>
</log4net>
Turns out the issue was not directly related to log4net, but to the way ASP.Net MVC3 and newer handles exceptions by default. Some months ago we updated our applications from MVC2 to MVC4, and because of this code which is executed by default from global.asax.cs.Application_Start(), it "bypassed" our exception handling module when CustomErrors where set to RemoteOnly or On:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
}
This thread put me on the right track. I ended up removing the filters.Add(..) line, and now it seems to be working fine!

WIX: How to register an Application to a URL Protocol?

In WiX you can register file types easily:
<ProgId Id="MyApp.File" Description="MyApp File" Icon="MyAppEXE" IconIndex="0">
<Extension Id="ext" ContentType="application/x-myapp-file">
<Verb Id="open" Command="&Open" TargetFile="MyAppEXE" Argument=""%1""/>
</Extension>
</ProgId>
What if I want to register an URL protocol, as specified here? Obviously, it has no extension so where would I put the Verb tag? Or should I use another approach?
Thanks.
Just to add the code of the #Yan Sklyarenko's answer:
<Component Id="ProductComponent" Guid="{206C911C-56EF-44B8-9257-5FD214427965}">
<File Source="$(var.MyMainProgram.TargetPath)" />
<RegistryKey Root="HKCR"
Key="protocolname"
Action="createAndRemoveOnUninstall">
<RegistryValue Type="string" Name="URL Protocol" Value=""/>
<RegistryValue Type="string" Value="URL:name of the protocol"/>
<RegistryKey Key="DefaultIcon">
<RegistryValue Type="string" Value="MyMainProgram.exe" />
</RegistryKey>
<RegistryKey Key="shell\open\command">
<RegistryValue Type="string" Value=""[INSTALLFOLDER]MyMainProgram.exe" "%1"" />
</RegistryKey>
</RegistryKey>
</Component>
MyMainProgram is a reference to my main project in the wix setup project
protocolname is the name of the protocol used in the url: protocolname://
name of the protocol is the formal name of the protocol
I doubt there's an out-of-the-box feature for this in WiX (probably, in 3.6?), but as far as I can see by the link you provided, the process of registering a URL protocol is adding a bunch of entries to the system registry. Hence, you can add RegistryKey/RegistryValue elements manually to emulate this.

Resources