安装后启动.vsto文件。 (的InstallShield)

时间:2012-01-30 08:10:52

标签: vsto installshield

我有一个通过InstallShield创建的msi安装程序,它将一些文件移动到所需位置, 将一些信息写入注册表并安装VSTO运行时。但是我需要在安装完成后启动随应用程序一起安装的.vsto文件。我可以使用自定义操作吗?如果该文件是.exe文件,那将是相当容易的,但我怎么能启动.vsto文件?
[UPD]

嗯,可能有一个更简单的解决方案: 我可以打电话给这个功能:
 public override void Install(IDictionary stateSaver)
来自InstallShield?像这样的东西: 自定义操作 - >在Windows Installer动态链接库中调用函数 - >存储在二进制表=>中  AssemblyFile = \ InclusionListCustomActions.dll MethodSignature = InclusionListCustomActions.TrustInstaller.Install(但是这里有什么参数?

2 个答案:

答案 0 :(得分:3)

您不应该启动VSTO文件,因为这只会按用户安装。你应该做的是将它添加到你需要的办公应用程序的AddIns注册表项中,并使用| vstolocal属性告诉它不要部署到点击一次缓存。

答案 1 :(得分:0)

您可以按照http://msdn.microsoft.com/en-us/library/cc563937%28v=office.12%29.aspx中描述的步骤操作,您可以在Installshield中复制相同的步骤,复制文件并按指定设置注册表值,在启动Office应用程序时它会自动获取vsto文件

要向包含列表添加信息,您必须编写控制台应用程序,然后从installshield调用控制台应用程序。下面的代码将有助于

            string RSA_PublicKey = @"<RSAKeyValue><Modulus></Modulus></RSAKeyValue>";
            //get this key from .vsto file
            try
            {
                SecurityPermission permission =
                    new SecurityPermission(PermissionState.Unrestricted);
                permission.Demand();
            }
            catch (SecurityException)
            {
                Console.WriteLine(
                    "You have insufficient privileges to " +
                    "register a trust relationship. Start Excel " +
                    "and confirm the trust dialog to run the addin.");
                Console.ReadLine();
            }
            Uri deploymentManifestLocation = null;
            var excelPath = YourAPPPath;              
            if (Uri.TryCreate(excelPath,
                UriKind.RelativeOrAbsolute, out deploymentManifestLocation) == false)
            {
                Console.WriteLine(
                    "The location of the deployment manifest is missing or invalid.");
                Console.ReadLine();
            }

            if (!File.Exists(excelPath))
            {
                UserInclusionList.Remove(deploymentManifestLocation);
                Console.WriteLine(deploymentManifestLocation.ToString() + "removed from inclusion list");

            }
            else
            {
                AddInSecurityEntry entry = new AddInSecurityEntry(
                          deploymentManifestLocation, RSA_PublicKey);
                UserInclusionList.Add(entry);
                Console.WriteLine(deploymentManifestLocation.ToString() + "Added to inclusion list");                  
            }