我正在尝试从C#程序集动态运行.jar(使用Process.Start(info)
).现在,从控制台应用程序我可以运行:
ProcessStartInfo info = new ProcessStartInfo("java", "-jar somerandom.jar");
Run Code Online (Sandbox Code Playgroud)
但是,在程序集中,我不断得到Win32Exception
"系统无法找到指定的文件",并且必须将行更改为Java的完整路径,如下所示:
ProcessStartInfo info = new ProcessStartInfo("C:\\Program Files\\Java\\jre6\\bin\\java.exe", "-jar somerandom.jar");
Run Code Online (Sandbox Code Playgroud)
这显然不行.我需要一种动态(但声明性地)确定Java的安装位置的方法.
我开始考虑查看注册表,但是当我到达那里时,我注意到版本有特定的密钥,甚至不能保证它们是数字的(例如"HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.6"和"HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.6.0_20").
从C#应用程序中查找最新的java.exe路径最可靠的"长途"解决方案是什么?
非常感谢提前.
- 编辑 -
感谢GenericTypeTea和Stephen Cleary的回答,我用以下方法解决了这个问题:
private String GetJavaInstallationPath()
{
String javaKey = "SOFTWARE\\JavaSoft\\Java Runtime Environment";
using (var baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(javaKey))
{
String currentVersion = baseKey.GetValue("CurrentVersion").ToString();
using (var homeKey = baseKey.OpenSubKey(currentVersion))
return homeKey.GetValue("JavaHome").ToString();
}
}
Run Code Online (Sandbox Code Playgroud) 偶然的,有一个新兴的Haskell UI框架用于Windows吗?
我最近开始研究这种语言,从我看到的,它将用于很棒的"一次性"应用程序(精心设计的脚本).
然而,如果没有一个好的UI框架,我无法看到它在更明显的竞争者的烟雾和镜子之下进入.
我读过有很多框架,但没有一个是全功能的.
我只是想知道这是否正在上升,或者是否只是太难以让足够的开发人员朝着同一方向前进?
我刚刚发现jQueryUI现在拥有它自己的内置自动完成组合框.好消息!
不幸的是,我发现的下一件事是,使它成为多列似乎并不那么简单(至少通过文档).
这里有一篇帖子,有人提到他们已经完成了(甚至提供了代码),但是我很难理解他们的一些代码在做什么.
我很好奇,如果有人之前遇到过这个问题,可以发布一个快速简便的样本来制作多列结果集.
非常感谢提前.
我有一种情况,我们正在连接到 SOAP 服务。
我们得到的响应如下所示:
<SomeObject>
<item1>1</item1>
<thing1>2</thing1>
<arrayItem><foo>text</foo></arrayItem>
<arrayItem><foo>text1</foo></arrayItem>
<arrayItem><foo>text2</foo></arrayItem>
</SomeObject>
Run Code Online (Sandbox Code Playgroud)
我需要复制该响应的输出。我一直遇到的问题是<arrayItem>
's 被封装了<arrayItemList>
,我真的需要把's 去掉<arrayItemList>
。
有谁知道我可以在 WCF 对象上放什么来正确序列化/反序列化我们接收的对象?
编辑
我正在处理的对象是这样的:
[DataContract]
public class SomeObject
{
[DataMember(Order = 0)]
public string item1 {get;set;}
[DataMember(Order = 1)]
public string thing1 {get;set;}
[DataMember(Order = 2)]
public List<arrayItem> {get;set;}
}
[DataContract]
public class arrayItem
{
[DataMember]
public string foo {get;set;}
}
Run Code Online (Sandbox Code Playgroud) c# ×2
windows ×2
autocomplete ×1
editor ×1
frameworks ×1
haskell ×1
html ×1
java ×1
javascript ×1
jquery ×1
jquery-ui ×1
registry ×1
wcf ×1