我有一个自我升级过程,我的主应用程序exe启动一个updater exe在命令行上传递一个句柄.应用程序exe然后调用ExitProcess退出,并且updater在传入的句柄中调用WaitForSingleObject以等待应用程序exe终止.
WaitForSingleObject确实等待.在应用程序调用ExitProcess之前,更新程序会停止.
但是,有时,当更新程序尝试使用新版本覆盖应用程序dll时,我会收到文件锁定错误,当前版本的更新程序将其视为不可恢复的错误并终止.似乎包括任意睡眠(100)足以绕过这个"问题",但我真的很讨厌这样的代码.真的很讨厌.
对我来说,当主应用程序仍处于活动状态以便锁定dll文件时,可以发出进程句柄的信号,这似乎很奇怪.
在Windows上,无论您使用哪个框架,所有框架最终都需要调用用户模式user32 :: CreateWindowEx API来实际在桌面上创建窗口.
在Ubuntu或者一般的Linux系统中,似乎选择使用像Wx或Qt或GTK +这样的小部件框架来创建GUI应用程序,但所有这些框架都觉得它们包含了更基本的东西.这些都是直接与Linux上的X对话吗?我以为Ubuntu正在转向非X窗口管理器,那么他们将使用什么呢?
我将使用什么库来访问所有这些框架使用的窗口管理器?
所以,是的,我发现自己处于一个可疑的位置,即执行一个SwitchToThisWindow强制我的窗口到前面的调用.我同意,它并不理想,但并不总是可以反对别人认为必要的产品"功能".
现在,我认为SwitchToThisWindow是一个胜利的AttachThreadInput黑客做强制窗口切换,因为它不太可能死锁,应该SwitchToThisWindow被删除,或停止运作我不会抱怨.
但是,SwitchToThisWindow除了在为fAltTab参数传递FALSE时将目标窗口置于顶部,并且如果传递TRUE则不执行任何操作时,会产生令人遗憾的副作用,即将当前前景窗口推送到z顺序的底部.
如何避免这种"推动当前活动到z-bottom"的行为而不诉诸AttachThreadInput?
或者,MS可以删除AttachThreadInput作为一个可行的解决方法,我可以告诉我的经理,实际上,不可能,实际上是不可能的.
我正在尝试使用Code :: Blocks在Ubuntu 11.4上开发GTK +应用程序.
www.gtk.org有关于从源代码构建GTK +的说明,看起来很复杂.但是Ubuntu软件包管理器将libgtk3-dev列为我安装的软件包.
Code :: Blocks我使用Ubuntu软件中心安装.
使用Code :: Blocks项目向导创建一个GTK +项目,当我构建时,项目无法编译"找不到gtk/gtk.h".
显然,GTK include(和lib)文件夹未添加到Code :: Blocks搜索文件夹中.我找到了相关的路径和文件......
我是否必须明确地手动将所有搜索路径添加到Code :: Blocks的搜索路径中?或者我错过了一些安装步骤.
dotnet publish发布到项目bin/netcoreapp2.2/Debug/publish文件夹中的命令。其中netcoreapp2.2可能随 dotnet 版本而Debug变化,并随-c参数指定的任何配置而变化。
对于 CI/CD 目的,这显然是不可取的。或者,可以传递-o显式输出路径,但同样,在 CI/CI 环境中,此路径应位于项目文件夹结构内,例如:
dotnet publish -o publish
Run Code Online (Sandbox Code Playgroud)
但是,因为发布命令会搜索所有文件,所以它会选择以前的发布尝试并递归地存储它们。这可以通过显式清理发布文件夹和/或向项目的 csproj 添加 a 来缓解,但现在构建脚本和 csproj 之间存在依赖关系:如果构建脚本中的发布路径因任何原因更改如果没有相应的 csproj 更新,事情就会中断。
因此,最不脆弱的选项似乎是使用默认输出路径,因为它会自动从 globbing 中排除,但是如何删除版本和配置敏感性?有没有一种特别安全的方法让 dotnet 告诉我的 CI/CD 环境它的构建/发布输出路径是什么?
我试图在XCode中创建一个mac应用程序,它在动态库中有一些实现.
我在我的XCode可可项目中添加了一个新的目标(动态库),在与框架和预编译头文件进行了一些斗争之后,进行了dynlib编译 - 并从调试器中成功运行.
当独立运行时,显然dynlib处于错误的位置."未加载库:/usr/local/lib/testlib.dynlib".在Windows上 - 我更常用的平台 - Dll可以放在与exe相同的文件夹中,也可以放在系统路径的任何位置.
我宁愿我的应用程序在其应用程序包中的某处找到它的dynlib(并且某些文档似乎证实这是正确的方法),但我不知道如何.
是否可以在XCode中配置项目,以便dylib实际上被复制到应用程序包中,在应用程序将查找它的位置?
看来我不需要使用otool来重置搜索路径.如果我编辑目标信息 - >构建 - >部署 - >安装目录,我可以从XCode内部更改dyld将为dylib查看的路径.默认情况下,新的动态库项目的路径设置为/usr/local/lib.我已经改为./- otool确认./现在是dyld将要寻找这个特定动态模块的地方.不幸的是./似乎并没有实际引用我的应用程序包中的任何目录:(
所以,我的问题(在其他线程中没有回答)现在是:1.如何在目标信息 - > ... - >安装目录设置中输入有意义的相对路径,以及2.如何自动获取XCode将dylib'target'复制到相对位置的应用程序包目标的bundle文件夹中?
在Windows上,每个线程都有一个消息队列,每个消息队列将处理该线程拥有的窗口的消息.这意味着编写一个应用程序非常简单,您可以使用消息循环和一个(或多个)窗口创建一个线程.忽略任何类型的应用程序问题,现在有一个应用程序窗口将继续与用户交互,即使其他窗口之一忙于某种模式操作.
现在,在将应用程序移植到cocoa时,我遇到了Interface Builder.对于希望更多地控制窗口创建和消息循环构造的人来说,这是一个惊喜.然而,我可以看到IB来自哪里.
然而,我的问题在于不透明的函数NSApplicationMain().这 - 在应用程序主线程上,自动创建应用程序主窗口,并运行消息泵,所有数据都可以从NIB文件中很好地驱动.
然而,这给我留下了一个问题:即使我认为Interface Builder是制作我的主应用程序窗口的方法 - 我已经想出足够的目标C来动态创建子窗口 - 以及如何创建线程 - 我可以看到如何在工作线程中创建消息泵.我开始怀疑它的可能性.
在可可中的窗口是否具有它们在Win32中所做的那种线程关联?即每个线程有自己的消息调度循环为该线程拥有的窗口?我开始怀疑也许Cocoa期望我的所有窗口都被主线"拥有",我只是将工作(和绘图)偏移到其他线程上.
有关如何最好地将多窗口每线程Win32应用程序转换为Cocoa范例的任何线索?
通过 ASP.NET Core 的选项模式,我们可以创建服务并通过两个单独的调用来注册它。
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<MyService>();
services.Configure<MyServiceOptions>(o => o.Param = 1);
services.AddMvc();
};
Run Code Online (Sandbox Code Playgroud)
但是,我完全不清楚如何以及是否可以实例化服务的两个实例并将不同的选项绑定到它们?即给定某个基类的两个专业化,我们如何在它们之间共享一个选项类?
public class MyService {}
public class MyService1 : MyService {}
public class MyService2 : MyService2 {}
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<MyService1>();
services.AddTransient<MyService2>();
// What goes here?
// config for instance 1
//services.Configure<MyServiceOptions>(o => o.Param = 1);
// config for instance 2
//services.Configure<MyServiceOptions>(o => o.Param = 2);
services.AddMvc();
};
Run Code Online (Sandbox Code Playgroud)
基本上我想要类似 IServiceCollection.AddDbContext 扩展方法,但是对于服务,我已经查看了 EF Core 扩展方法,但我根本没有得到它们。
我有一个NSWindow,它托管了一个WebView,它已经连接到一个脚本处理程序.
现在,当用户单击WebView上控件上的按钮时,它会在我的对象上调用Objective C方法.
在这种特定情况下,按钮的操作是尝试关闭托管WebView的窗口
[[webView窗口]关闭];
这通常有效,但有时我会得到一个SEGFAULT或其他一些访问冲突,因为事件循环试图将鼠标消息发送到现在被破坏的视图.
当我试图关闭窗口时,callstack很可怕,偶数循环调用了窗口调用了webView,当我尝试关闭窗口时调用了我的脚本委托.从该对象的回调中销毁对象通常是危险的,但是由于用户与它们的视图交互,我无法弄清楚应该如何安全地关闭窗口.
我有一些 EF Core 模型,它们是使用dotnet ef dbContext scaffold数据库优先方法构建的,用于生成模型。我的问题是数据库使用整数主键,用于将表链接在一起,但有一个基于字符串的索引,可用作搜索表的合理索引。
但是:当我尝试使用时,FindAsync("abc000")我得到了一个完全预期的错误The key value at position 0 of the call to 'DbSet<Entity>.Find' was of type 'string', which does not match the property type of 'long'.
所以,两个问题:
它们看起来像这样:
class Entity
{
long Id;
string Key;
};
Run Code Online (Sandbox Code Playgroud)
在 OnModelCreating 中:
modelBuilder.Entity<Entity>(entity =>
{
entity.ToTable("tb_entity", "main");
entity.HasIndex(e => e.Key)
.HasName("uq_entity_key")
.IsUnique();
entity.Property(e => e.Id).HasColumnName("_id");
entity.Property(e => e.Key)
.HasColumnName("key")
.HasMaxLength(255);
}
Run Code Online (Sandbox Code Playgroud)
创建表的 SQL 如下所示:
CREATE TABLE [tb_entity]
(
_id …Run Code Online (Sandbox Code Playgroud) 我有一个NSView,它绘制了一组不规则形状(和重叠)的应用程序管理对象:显然无法通过有效使用非重叠矩形来描述.
我希望在光标覆盖其中一个对象时更改光标.通常的方法似乎是设置跟踪rects以响应-(void)resetCursorRects,每个与不同的光标相关联,但我不能将其应用于这种情况.
我只知道在处理-(void)mouseMoved:(NSEvent *)theEvent消息时哪个对象在光标下最顶层...所以我需要更改光标.
这个合适吗?什么时候NSView会尝试将光标设置为通常的箭头?我不想以闪烁的光标结束,因为NSView将其设置为默认的不同消息.
假设我有一个带有静态函数的单例对象:
static int MySingletonObject::getInt()
Run Code Online (Sandbox Code Playgroud)
现在我想根据调用函数的工作线程(MFC 线程)返回不同的 int。
我知道我可以在创建线程时将参数传递给线程函数。但是有没有办法在没有这些参数信息的情况下识别线程?
谢谢!