我将我的应用程序编译为使用 .NET Framework 4,因为我需要它在不支持 .NET Framework 4.5 的 XP 和 Server 2003 上运行。问题是它现在在 XP 和 2003 服务器上运行良好,但在我的服务器 2012 上运行不正常。服务器 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);
}
最佳答案
我强烈怀疑这与您使用的 .NET 版本无关。毕竟,从堆栈跟踪中您可以清楚地看到您的代码正在执行:
at MyApplication.Form1.DirectoryExporter_Click(Object sender, EventArgs e)
我怀疑问题出在权限问题上 - 无论您尝试在 Windows Server 2012 下做什么都会失败,因为它在更锁定的环境中运行。
或者,您可能正在尝试启动一个存在于您的开发机器上但不在服务器上的进程。如果不查看代码,我们无法真正判断 - 但您基本上应该仔细查看您在 DirectoryExporter_Click
中所做的事情,尤其是当您调用 Process.Start
时。检查您要运行的可执行文件,然后检查它是否存在于服务器上,以及您运行的用户是否有权执行它。
关于c# - 在 .Net 4 框架中编译的应用程序将无法在 Server 2012 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25687087/