C#安装项目安装后运行

时间:2016-08-10 11:13:33

标签: c# installation project

大家好,我是论坛的新手,也是编程,需要一些关于项目的帮助。

所以我最近开始开发一个程序,首先必须在Registry =>结束时添加其路径。环境=>路径。 对于这项工作,我创建了一个项目(MainLogic),其中包含一个执行该作业的类(Program),包含此事件的Installer Class,并配置了Setup Project。 SOURCE

    public InstallerClass1()            
    {            
        this.Committed += InstallerClass1_Committed;
        this.Committing += InstallerClass1_Committing;
    }

    private void InstallerClass1_Committing(object sender, InstallEventArgs e)
    {
        //Console.WriteLine("");
        //Console.WriteLine("Committing Event occurred.");
        //Console.WriteLine("");
    }

    private void InstallerClass1_Committed(object sender, InstallEventArgs e)
    {
            Directory.SetCurrentDirectory(Path.GetDirectoryName
            (Assembly.GetExecutingAssembly().Location));
            Process.Start(Path.GetDirectoryName(
              Assembly.GetExecutingAssembly().Location) + "\\MainLogic.exe");
    }  

程序安装正确,但安装后调用的MainLogic.exe文件导致错误,无法启动。 MainLogic.Program.Main(String[] args)

处的空引用是个例外

这是一张更好理解的图片 -

enter image description here

有没有办法避免这种异常,或者你能否提供另一种可行的异常。

***这是我发现的。我可以执行创建和输入到文件。在控制台上书写。可能很多其他的东西没有问题。但是当试图执行这个实际上我必须使用的代码的和平时......

    Registry.CurrentUser.OpenSubKey("Pass Key", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("Finaly", "Done");
    Registry.CurrentUser.Close();

......我上面描述的例外情况发生了。建议?

所有这些“练习”的主要原因是因为我想在我的应用程序中实现ffmpeg。 我想你听说过ffmpeg(一个在命令提示符下工作的视频/音频处理程序)。 所以我正在研究的是在我的项目中实现它从视频文件中提取mp3,但我想让它更加用户友好,这样用户就可以通过GUI传递命令,从那里我的代码应该完成另一项工作。所以ffmpeg通过命令提示符工作(我知道有一个包装器,但我对阅读的内容不是很满意)但首先你必须在注册表中添加他的路径到Path的值。这就是我的问题所在。

也许这对你来说听起来很愚蠢,但是你知道......当你开始做某事的时候一直都是这样。

1 个答案:

答案 0 :(得分:1)

如果当然你可以添加异常处理,看看出了什么问题,但无论如何你都不知道。尝试直接在安装程序中设置注册表项

[RunInstaller(true)]
public partial class Installer1 : Installer
{
    public override void Install(IDictionary stateSaver)
    {
        base.Install(stateSaver);

        const string key_path = "SOFTWARE\\YourCompany\\YourApplication";
        const string key_value_name = "InstallationDirectory";

        RegistryKey key = Registry.LocalMachine.OpenSubKey(key_path, Microsoft.Win32.RegistryKeyPermissionCheck.ReadWriteSubTree);

        if (key == null)
        {
            key = Registry.LocalMachine.CreateSubKey(key_path);
        }

        string tgt_dir = "someDirectory";

        key.SetValue(key_value_name, tgt_dir);

    }

如果你想改变路径enironment变量设置键那里。您只需添加一个新变量或查找一个新变量(包括值),例如 Registry.GetValue MSDN-Link

用户变量

HKEY_CURRENT_USER\Environment

系统变量

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment