繁体   English   中英

在应用程序启动时出现EntryPointNotFoundException TaskDialog,但稍后运行良好

[英]EntryPointNotFoundException TaskDialog at start of Application but runs fine later

我直接从Windows API Pack for .NET(包装器)获得TaskDialog源,但是每当我尝试直接在程序的静态void Main()区域中打开TaskDialog时,都会抛出EntryPointNotFoundException。 但是TaskDialog会在我的代码中生成并显示得很好。 怎么会这样

引发EntryPointNotFoundException的代码是

/// <summary>
/// TaskDialogIndirect taken from commctl.h
/// </summary>
/// <param name="pTaskConfig">All the parameters about the Task Dialog to Show.</param>
/// <param name="pnButton">The push button pressed.</param>
/// <param name="pnRadioButton">The radio button that was selected.</param>
/// <param name="pfVerificationFlagChecked">The state of the verification checkbox on dismiss of the Task Dialog.</param>
[DllImport("ComCtl32", CharSet = CharSet.Unicode, PreserveSig = false)]
internal static extern void TaskDialogIndirect(
    [In] ref TASKDIALOGCONFIG pTaskConfig,
    [Out] out int pnButton,
    [Out] out int pnRadioButton,
    [Out] out bool pfVerificationFlagChecked);

但是让我吃惊的事实是,相同的代码在不同的地方可以一次工作,而不能在另一个时间工作。 这可能与程序未加载引用或其他原因有关,但这让我很惊讶。 我应用程序入口点的代码是

try
{
    var taskDialog = new TaskDialog();
    taskDialog.WindowTitle = ".NET Update Notification";
    taskDialog.MainInstruction = "";

    taskDialog.MainIcon = TaskDialogIcon.Error;

    taskDialog.EnableHyperlinks = true;
    taskDialog.Content =
        "Your .NET Framework Version is out-of-date.\nPlease see <a href=\"***********\">the forums</a> for more info.\n\nSorry, but I can't continue without it.\n\n If you had the correct install this message wouldn't appear.";

    taskDialog.Callback =
        new TaskDialogCallback((ActiveTaskDialog _taskDialog, TaskDialogNotificationArgs _args, object _callbackData) =>
            {
                if (_args.Notification == TaskDialogNotification.HyperlinkClicked)
                {
                    Process.Start(_args.Hyperlink);
                }
                return false;
            });

    var doItButton = new TaskDialogButton();
    doItButton.ButtonId = 101;
    doItButton.ButtonText = "Quit";

    taskDialog.Buttons = new TaskDialogButton[] { doItButton };

    int result = taskDialog.Show(null);
    Application.Exit();
}
/*
* Handles the error message regarding ComCtl32.dll not being found.
* In the event of the beautiful TaskDialog above (which uses ComCtl32.dll)
* cannot be opened, fall back to an ugly as **** MessageBox with a '?' Help
* button in the title bar -.-
*/
catch (EntryPointNotFoundException)
{
    MessageBox.Show(
        "Your .NET Framework Version is out-of-date.\nTo find out how to get .NET 4.0 simply visit the forums at *********.\n\nSorry, but I can't continue without it :(",
        ".NET Update Notification", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

谢谢你的时间 :)

乔希

从MSDN尝试此解决方案-

步骤1:在解决方案资源管理器中右键单击您的项目

步骤2:选择->添加->新项目

步骤3:添加一个应用程序清单文件,该文件在VS 2010中为app.manifest

步骤4:取消注释最后一个xml节,从依赖项标签开始直到/ dependency

该代码应如下所示-

<dependency>
<dependentAssembly>
 <assemblyIdentity
  type="win32"
  name="Microsoft.Windows.Common-Controls"
  version="6.0.0.0"
  processorArchitecture="*"
  publicKeyToken="6595b64144ccf1df"
  language="*"
 />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM