我编译了我的应用程序以使用.NET Framework 4,因为我需要这个工作在不支持.NET Framework 4.5的XP和Server 2003上。问题是它现在可以在XP和2003服务器上正常运行但在我的Server 2012上运行不正确.Server 2012有.NET 4.5,从我读过的.NET 4.5向后兼容.Net 4
下面是我在2012服务器上收到的错误:
如果单击“继续”,应用程序中将出现未处理的异常,应用程序将忽略此错误并尝试继续。如果单击“退出”,应用程序将立即关闭。
系统找不到指定的文件。
详细说明:
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.ComponentModel.Win32Exception (0x80004005): The system cannot find the file specified
at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
at MyApplication.Form1.DirectoryExporter_Click(Object sender, EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.18449 built by: FX451RTMGDR
CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/mscorlib.dll
----------------------------------------
MyApplication
Assembly Version: 1.0.0.0
Win32 Version: 1.0.0.0
CodeBase: file:///C:/Users/administrator.DM/Desktop/MyApplication.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.18408 built by: FX451RTMGREL
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.18408 built by: FX451RTMGREL
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.18408 built by: FX451RTMGREL
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.
以下是此时正在调用的代码:
public string get_regValue(string userroot, string subkey, string keyname, string app)
{
string userRoot = userroot;
string subKey = subkey;
string keyName = userRoot + "\\" + subKey;
string regValue = (string)Registry.GetValue(keyName, keyname, null);
regValue = regValue + app;
return regValue;
}
private void DirectoryExporter_Click(object sender, EventArgs e)
{
// Button to Launch the Directory Exporter
string regKey;
RegistryKey openKey = Registry.LocalMachine.OpenSubKey("HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Dell");
// Checks for key, if null (empty) get 32 bit key
if (openKey == null)
{
// 32 bit key
regKey = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Dell";
}
else
{
// 64 bit key
regKey = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Dell";
}
var regvalue = get_regValue(regKey, "Migrator for GroupWise", "AdminInstallDir", "gwdirapp.exe");
Process.Start(@regvalue);
}
答案 0 :(得分:4)
我强烈怀疑这与您正在使用的.NET版本无关。毕竟,从堆栈跟踪中,您可以清楚地看到代码 正在执行:
at MyApplication.Form1.DirectoryExporter_Click(Object sender, EventArgs e)
我怀疑问题是权限之一 - 无论您尝试做什么,都是因为它在更加锁定的环境中运行而在Windows Server 2012下失败。
或者,可能是您尝试启动开发计算机上存在的进程,但不是在服务器上。我们无法在不看代码的情况下告诉您 - 但您基本上应该仔细查看您在DirectoryExporter_Click
中所做的事情,特别是在您致电Process.Start
时。检查您尝试运行的可执行文件,然后检查它是否存在于服务器上,以及您运行的用户是否有权执行该文件。
答案 1 :(得分:0)
我通过编辑代码解决了这个问题,如下所示:
public string get_regValue(string userroot, string subkey, string keyname, string app)
{
string userRoot = userroot;
string subKey = subkey;
string keyName = userRoot + "\\" + subKey;
string regValue = (string)Registry.GetValue(keyName, keyname, null);
regValue = regValue + app;
return regValue;
}
private void DirectoryExporter_Click(object sender, EventArgs e)
{
// Button to Launch the Directory Exporter
string regKey;
RegistryKey openKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\Wow6432Node\\Dell");
// Checks for key, if null (empty) get 32 bit key
if (openKey == null)
{
// 32 bit key
regKey = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Dell";
}
else
{
// 64 bit key
regKey = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Dell";
}
var regvalue = get_regValue(regKey, "Migrator for GroupWise", "AdminInstallDir", "gwdirapp.exe");
Process.Start(regvalue);