0

私はたくさん検索しましたが、まだ正しい解決策を見つけることができません。

.net セットアップ ウィザードを使用してセットアップを作成し、セットアップ ウィザードに 2 つのチェックボックスを追加したいと考えています。

最初のチェックボックスは、ユーザーに「スタートアップにプログラムを追加する」ように求めます。チェックすると、スタートアップにソフトウェアが追加されます。

2 番目のチェックボックスは、「システム トレイ通知アイコンの作成」を要求します。オンにすると、システム トレイに通知アイコンが作成されます。通知アイコンは、アプリケーションの実行時だけでなく、永続的に表示する必要があります)。

カスタムアクションに関係していることは知っていますが、まだ理解できていません。適切な説明とともに、これに関する記事またはコードを提供してください。

4

1 に答える 1

1

実際、カスタム アクションはこれを行うのに適した場所です。インストール プロセス中に 2 つのカスタム チェックボックスを作成するために使用するコードを次に示します。

[RunInstaller(true)]
    public class DeploymentManager : Installer{



  public override void Install(IDictionary stateSaver) {
     base.Install (stateSaver);


const string DESKTOP_SHORTCUT_PARAM = "DESKTOP_SHORTCUT";
const string QUICKLAUNCH_SHORTCUT_PARAM = "QUICKLAUNCH_SHORTCUT";
const string ALLUSERS_PARAM = "ALLUSERS";

        // The installer will pass the ALLUSERS, DESKTOP_SHORTCUT and QUICKLAUNCH_SHORTCUT   
        // parameters. These have been set to the values of radio buttons and checkboxes from the
        // MSI user interface.
        // ALLUSERS is set according to whether the user chooses to install for all users (="1") 
        // or just for themselves (="").
        // If the user checked the checkbox to install one of the shortcuts, then the corresponding 
        // parameter value is "1".  If the user did not check the checkbox to install one of the 
        // desktop shortcut, then the corresponding parameter value is an empty string.



        bool allusers = true; // Context.Parameters[ALLUSERS_PARAM] != string.Empty;
  bool installDesktopShortcut = true; //Context.Parameters[DESKTOP_SHORTCUT_PARAM] != string.Empty;
        bool installQuickLaunchShortcut = true;// Context.Parameters[QUICKLAUNCH_SHORTCUT_PARAM] != string.Empty;

if (installDesktopShortcut){
    // If this is an All Users install then we need to install the desktop shortcut for 
   // all users.  .Net does not give us access to the All Users Desktop special folder,
   // but we can get this using the Windows Scripting Host.
   string desktopFolder = null;
         if (allusers){
       try{
    // This is in a Try block in case AllUsersDesktop is not supported
    object allUsersDesktop = "AllUsersDesktop";
    WshShell shell = new WshShellClass();
         desktopFolder = shell.SpecialFolders.Item(ref allUsersDesktop).ToString();
}
catch {}
  }
if (desktopFolder == null)
desktopFolder = Environment.GetFolderPathEnvironment.SpecialFolder.DesktopDirectory);

CreateShortcut(desktopFolder, ShortcutName, Path.Combine(TargetAssemblyFolder, TargetAssembly), ShortcutDescription, Path.Combine(TargetAssemblyFolder, "your.ico"));
        }

        if (installQuickLaunchShortcut){
            CreateShortcut(QuickLaunchFolder, ShortcutName, ShortcutFullName, ShortcutDescription, Path.Combine(TargetAssemblyFolder, "your.ico"));
        }
    }

private void CreateShortcut(string folder, string name, string target, string description, string targetIcon){
string shortcutFullName = Path.Combine(folder, name + ".lnk");

try{
    WshShell shell = new WshShellClass();
    IWshShortcut link = (IWshShortcut)shell.CreateShortcut(shortcutFullName);
    link.TargetPath = target;
    link.Description = description;
    FileInfo fi = new FileInfo(targetIcon);

    link.IconLocation = Path.Combine(fi.Directory.FullName, fi.Name);
    link.Save();
}catch (Exception ex){
    MessageBox.Show(string.Format("The shortcut \"{0}\" could not be created.\n\n{1}", shortcutFullName, ex.ToString()),
    "Create Shortcut", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}

このコードを入手したら、カスタム アクションをインストーラーの [カスタム アクションのインストール] 領域に追加できます。

インストール プロセスの通知コードは似ていますが、レジストリに追加する必要があります。

于 2012-04-19T14:02:21.757 に答える