我正在部署应用程序,在用户选择安装应用程序的位置后的安装过程中,我希望获得该路径;我已经处于自定义操作中,但我不知道如何获取将要安装的应用程序路径!
这是Windows Forms,我正在使用Visual Studio 2010“C#”进行开发。
我正在使用默认的部署工具......
有什么想法吗?
提前感谢...
答案 0 :(得分:36)
自定义操作所在的类应继承自System.Configuration.Installer.Installer。它有一个名为Context的参数,它有一个Parameters字典。该字典包含许多有关安装的有用变量,您可以添加一些。
在“自定义操作”窗格中将自定义安装程序添加到安装项目后。选择Install操作并将CustomActionData属性设置为:
/targetdir="[TARGETDIR]\"
然后你可以访问这样的路径:
[RunInstaller(true)]
public partial class CustomInstaller : System.Configuration.Install.Installer
{
public override void Install(System.Collections.IDictionary stateSaver)
{
base.Install(stateSaver);
string path = this.Context.Parameters["targetdir"];
// Do something with path.
}
}
答案 1 :(得分:1)
我知道它的VB但这对我有用。
Private Sub DBInstaller_AfterInstall(ByVal sender As Object, ByVal e As System.Configuration.Install.InstallEventArgs) Handles Me.AfterInstall
MessageBox.Show(Context.Parameters("assemblypath"))
End Sub
答案 2 :(得分:0)
很抱歉发布旧帖子的回答,但我的回答可能对其他人有帮助。
public override void Install(System.Collections.IDictionary stateSaver)
{
base.Install(stateSaver);
rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
if (rkApp.GetValue("MyApp") == null)
{
rkApp.SetValue("MyApp", this.Context.Parameters["assemblypath"]);
}
else
{
if (rkApp.GetValue("MyApp").ToString() != this.Context.Parameters["assemblypath"])
{
rkApp.SetValue("MyApp", this.Context.Parameters["assemblypath"]);
}
}
}
public override void Uninstall(System.Collections.IDictionary savedState)
{
base.Uninstall(savedState);
rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
if (rkApp.GetValue("MyApp") != null)
{
rkApp.DeleteValue("MyApp", false);
}
}
答案 3 :(得分:-1)
def save(self, commit=True):
instance = super(DocumentForm, self).save(commit=False)
instance.filename = self.cleaned_data['file'].name
if commit:
instance.save() # error occurs here
return instance