As you've discovered, modifying the product name isn't sufficient. You need to modify the assembly name.
Details from http://weblogs.asp.net/sweinstein/archive/2008/08/24/top-5-secrets-of-net-desktop-deployment-wizards.aspx
The most important thing is having
support for multiple environments -
this isn't built in, and if you
attempt to deploy two different
ClickOnce builds with the same
deployment name to different sites,
the latest build will take precedence
and effectively overwrite the existing
deployment on the desktop.
The fix for this is relatively
straightforward - you need to provide
different deployment name for each
build. Like so -
<MSBuild
Projects="ClickOnce.csproj"
Targets="Publish"
Properties="
MinimumRequiredVersion=$(MinimumRequiredVersion);
ApplicationVersion=$(ApplicationVersion);
ApplicationRevision=$(ApplicationRevision);
CodeBranch=$(CodeBranch);
DeployEnv=$(DeployEnv)
AssemblyName=ClickOnce.$(DeployEnv);
PublishUrl=$(PublishUrl);
ProductName=ClickOnce $(CodeBranch) $(DeployEnv)" />
The one limitation of this approach is
that project references will no longer
work. Use file based assembly refs,
and it'll be fine.