【发布时间】:2016-08-11 01:07:53
【问题描述】:
大家好,我是论坛的新手,也正在编程,需要一些关于项目的帮助。
所以我最近开始开发一个程序,首先必须在 Registry => Environment => Path 末尾添加它的路径。 对于这项工作,我创建了项目(MainLogic),其中包含一个执行该工作的类(程序),安装程序类包含下面的这些事件并配置了安装项目。 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) 的空引用
这是一张更好理解的图片 -
有没有办法避免这种异常,或者你能给我另一个可行的方法。
*** 这是我找到的。我可以执行创建和输入文件。在控制台上书写。可能很多其他的东西都没有问题。但是当尝试执行我实际上必须使用的代码时...
Registry.CurrentUser.OpenSubKey("Pass Key", RegistryKeyPermissionCheck.ReadWriteSubTree).SetValue("Finaly", "Done");
Registry.CurrentUser.Close();
...发生了我上面描述的异常。有什么建议吗?
所以所有这些“练习”的主要原因是因为我想在我的应用程序中实现 ffmpeg。 我猜你听说过 ffmpeg(一个在命令提示符下工作的视频/音频处理程序)。 所以我正在做的是在我的项目中实现它,以便从视频文件中提取 mp3,但我想让它更加用户友好,以便用户可以通过 GUI 传递命令,然后我的代码应该从那里完成其他工作。所以 ffmpeg 通过命令提示符工作(我知道有一个包装器,但我对所读到的内容不太满意)但首先你必须将他的路径添加到注册表中的 Path 值。这就是我的问题所在。
也许这对你来说听起来很愚蠢,但你知道..当你开始做某事时,一直坚持下去。
【问题讨论】:
-
可以使用安装程序本身操作注册表。
-
应该是这样,因为设置完成后程序可能不会以管理员权限运行。
-
异常是在你的 main 中抛出的。看看你在那里做什么。
-
@SarveshMishra 这是真的,但你只能在那里添加新的键和值。我想要做的是使用我在 Installer 类中获得的当前安装的程序路径来编辑路径的值数据。用你建议的方式操作似乎是不可能的。
-
@ThorstenDittmar 那么有没有办法在提交事件中以管理员身份运行它?
标签: c# installation project