diff --git a/installer/setup.iss b/installer/setup.iss index 975de1e1..e94c83c8 100644 --- a/installer/setup.iss +++ b/installer/setup.iss @@ -36,7 +36,7 @@ Name: "autostart"; Description: "Bei Windows-Anmeldung automatisch starten"; Gro [Files] ; Hauptanwendung - Pfad anpassen nach Build -Source: "..\src\StarfaceOutlookSync\bin\Release\net4.8\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs +Source: "..\src\StarfaceOutlookSync\bin\Release\net8.0-windows\win-x64\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs [Icons] Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" @@ -57,26 +57,35 @@ Filename: "taskkill"; Parameters: "/F /IM {#MyAppExeName}"; Flags: runhidden; Ru Type: filesandordirs; Name: "{userappdata}\StarfaceOutlookSync" [Code] -// Pruefe ob .NET Framework 4.8 installiert ist -function IsDotNetInstalled(): Boolean; +// Pruefe ob .NET 8 Desktop Runtime installiert ist +function IsDotNet8Installed(): Boolean; var - Version: Cardinal; + ResultCode: Integer; begin - Result := RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full', 'Release', Version); + // dotnet --list-runtimes enthaelt "Microsoft.WindowsDesktop.App 8.x" + Result := Exec('dotnet', '--list-runtimes', '', SW_HIDE, ewWaitUntilTerminated, ResultCode); if Result then - Result := Version >= 528040; // .NET 4.8 + Result := ResultCode = 0; + // Einfacher Check: dotnet.exe muss existieren + Result := FileExists(ExpandConstant('{commonpf}\dotnet\dotnet.exe')) or + FileExists(ExpandConstant('{commonpf64}\dotnet\dotnet.exe')); end; function InitializeSetup(): Boolean; begin Result := True; - if not IsDotNetInstalled() then + if not IsDotNet8Installed() then begin - MsgBox('.NET Framework 4.8 oder hoeher wird benoetigt.' + #13#10 + - 'Bitte installieren Sie es von:' + #13#10 + - 'https://dotnet.microsoft.com/download/dotnet-framework/net48', - mbError, MB_OK); + if MsgBox('.NET 8 Desktop Runtime wird benoetigt.' + #13#10 + #13#10 + + 'Soll die Download-Seite geoeffnet werden?', + mbConfirmation, MB_YESNO) = IDYES then + begin + ShellExec('open', 'https://dotnet.microsoft.com/download/dotnet/8.0/runtime', '', '', SW_SHOWNORMAL, ewNoWait, ResultCode); + end; Result := False; end; end; + +var + ResultCode: Integer; diff --git a/src/StarfaceOutlookSync/Services/OutlookContactsService.cs b/src/StarfaceOutlookSync/Services/OutlookContactsService.cs index 18ca90ec..36a1ae71 100644 --- a/src/StarfaceOutlookSync/Services/OutlookContactsService.cs +++ b/src/StarfaceOutlookSync/Services/OutlookContactsService.cs @@ -11,6 +11,17 @@ namespace StarfaceOutlookSync.Services private Outlook.Application _outlookApp; private bool _weStartedOutlook; + // Marshal.GetActiveObject existiert nicht in .NET 8, daher P/Invoke + [DllImport("oleaut32.dll", PreserveSig = false)] + private static extern void GetActiveObject([MarshalAs(UnmanagedType.LPStruct)] Guid rclsid, IntPtr pvReserved, [MarshalAs(UnmanagedType.IUnknown)] out object ppunk); + + private static object GetActiveComObject(string progId) + { + var clsid = Type.GetTypeFromProgID(progId, true).GUID; + GetActiveObject(clsid, IntPtr.Zero, out var obj); + return obj; + } + private Outlook.Application GetOutlookApp() { if (_outlookApp != null) return _outlookApp; @@ -18,7 +29,7 @@ namespace StarfaceOutlookSync.Services try { // Versuche laufende Outlook-Instanz zu finden - _outlookApp = (Outlook.Application)Marshal.GetActiveObject("Outlook.Application"); + _outlookApp = (Outlook.Application)GetActiveComObject("Outlook.Application"); _weStartedOutlook = false; } catch diff --git a/src/StarfaceOutlookSync/StarfaceOutlookSync.csproj b/src/StarfaceOutlookSync/StarfaceOutlookSync.csproj index 84d305d8..502bdcc6 100644 --- a/src/StarfaceOutlookSync/StarfaceOutlookSync.csproj +++ b/src/StarfaceOutlookSync/StarfaceOutlookSync.csproj @@ -2,9 +2,8 @@ WinExe - net4.8 + net8.0-windows true - Resources\app.ico Starface Outlook Sync HackerSoft - Hacker-Net Telekommunikation Starface Outlook Sync @@ -13,21 +12,14 @@ 0.0.0.1 Synchronisiert Outlook-Kontakte mit Starface Telefonanlage Stefan Hacker - HackerSoft + win-x64 + false + true - - - $(ProgramFiles)\Microsoft Office\root\Office16\ADDINS\Microsoft.Office.Interop.Outlook.dll - false - - - - - - - + diff --git a/src/StarfaceOutlookSync/UI/MainForm.cs b/src/StarfaceOutlookSync/UI/MainForm.cs index 0f12cf06..40bb020e 100644 --- a/src/StarfaceOutlookSync/UI/MainForm.cs +++ b/src/StarfaceOutlookSync/UI/MainForm.cs @@ -228,17 +228,17 @@ namespace StarfaceOutlookSync.UI } } - private async Task SyncSelectedProfile() + private Task SyncSelectedProfile() { if (_profileList.SelectedItems.Count == 0) { MessageBox.Show("Bitte ein Profil auswaehlen.", "Sync", MessageBoxButtons.OK, MessageBoxIcon.Information); - return; + return Task.CompletedTask; } var profile = _profileList.SelectedItems[0].Tag as SyncProfile; - if (profile == null) return; + if (profile == null) return Task.CompletedTask; using (var syncForm = new SyncProgressForm(profile)) { @@ -246,6 +246,7 @@ namespace StarfaceOutlookSync.UI } RefreshProfileList(); + return Task.CompletedTask; } private async Task RunSync(SyncProfile profile)