2011-05-27 30 views
0

我通过服务名称为参数列表,但是当我看在安装方面是不是有:C#InstallUtil/ManagedInstallerClass:为什么键值对未传入安装程序上下文参数集合中?

args = new[] { Assembly.GetExecutingAssembly().Location, "/ServiceName=WinService1" }; 
ManagedInstallerClass.InstallHelper(args); 

为什么键值对不能传递到安装方面?

public override void Install(IDictionary stateSaver) 
{ 
    foreach (var param in Context.Parameters) 
    { 
     // ServiceName is not available in the Parameters collection 
    } 
} 
+1

可能是因为他们通过* stateSaver *。 – 2011-05-27 12:59:10

回答

0

试试这个代码:

IDictionary dictionary = new Dictionary<string, IEnumerable<string>>(); 
dictionary.Add(Assembly.GetExecutingAssembly().Location, 
       new string [] {"/ServiceName=WinService1"}); 
ManagedInstallerClass.InstallHelper(dictionary); 
+0

ManagedInstallerClass.InstallHelper需要一个字符串数组。 – Rookian 2011-05-30 15:45:06

+0

@Rookian从你的代码中获取IDictionary,但看到我的更新,如果这将有所帮助。对不起,如果是完全错误的方向 – oleksii 2011-05-30 15:47:24

+0

@oleksii,无法从'System.Collections.IDictionary'转换为'string []' – 2014-03-26 15:03:15

4

这是很古老的线程,但也许有人仍然可以使用类似的答案我可以有,如果它是早一点:)。 只有位置前的参数才会传递到安装程序的上下文中。 试试这个:

args = new[] { "/ServiceName=WinService1", Assembly.GetExecutingAssembly().Location }; 
ManagedInstallerClass.InstallHelper(args); 
+0

这给了我'System.IO.FileNotFoundException:无法加载文件或程序集'文件:/// C:\ path \ to \ exe \ --params'或它的一个依赖关系。系统找不到指定的文件。(注意,并不实际传递exe的名称,只有它所在的文件夹) – gregmac 2016-08-29 18:51:03

相关问题