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)