我有一个包含这些文件的文件夹:
alongfilename1.txt <--- created first
alongfilename3.txt <--- created second
Run Code Online (Sandbox Code Playgroud)
当我在命令提示符下运行DIR/x时,我看到分配了这些短名称:
ALONGF~1.TXT alongfilename1.txt
ALONGF~2.TXT alongfilename3.txt
Run Code Online (Sandbox Code Playgroud)
现在,如果我添加另一个文件:
alongfilename1.txt
alongfilename2.txt <--- created third
alongfilename3.txt
Run Code Online (Sandbox Code Playgroud)
我看到了这个:
ALONGF~1.TXT alongfilename1.txt
ALONGF~3.TXT alongfilename2.txt
ALONGF~2.TXT alongfilename3.txt
Run Code Online (Sandbox Code Playgroud)
精细.它似乎是根据我创建文件的日期/时间分配"〜#".它是否正确?
现在,如果我删除"alongfilename1.txt",其他两个文件将保留其短名称.
ALONGF~3.TXT alongfilename2.txt
ALONGF~2.TXT alongfilename3.txt
Run Code Online (Sandbox Code Playgroud)
何时释放该ID(在本例中为~1)以用于另一个短名称.它会永远吗?
另外,我的机器上的文件是否有可能是X的短名称,而同一文件在另一台机器上有一个短名称Y?我特别关注其自定义操作使用DOS短名称的安装.
多谢你们.
我遇到了我认为是PHP应用程序的循环依赖问题.如果这不正确,请告诉我.情况如下:
两个类,LogManager和DBSession.
DBSession用于与数据库交互,LogManager用于记录文件.两者都广泛用于我的应用程序中.创建DBSession实例时,必须通过构造函数参数为其提供LogManager实例.这是因为DBSession有时会将信息记录到文件中,并将使用LogManager实例执行此操作.
现在,我想扩展LogManager,以便它也可以登录到数据库表,而不是文本文件.当然,我倾向于重复使用现有的课程,但我很快意识到这带来了一个有趣的情况.
DBSession已经需要一个LogManager实例来构造.如果我想在LogManager中重用DBSession类,它现在需要一个DBSession实例.我怎样才能满足这两个要求?显然,我的方法必定是错误的.
你怎么建议我解决这个问题?
先谢谢你,伙计们.
我尝试通过VB.net中的MailMessage.Headers.Set调用来完成此操作.见下文:
Dim objMail As MailMessage
Dim objSMTPClient As SmtpClient
objMail = New MailMessage()
objSMTPClient = New SmtpClient()
objMail.From = New MailAddress(MY_EMAIL_ADDRESS)
objMail.To.Add(New MailAddress(TEST_EMAIL_ADDRESS))
objMail.Headers.Set("Date", "09 Jan 1999 17:23:42 -0400")'date in the past'
objMail.Subject = "The Subject"
objMail.Body = "The Body"
objSMTPClient.Port = 25
objSMTPClient.Host = HOST_IP
objSMTPClient.Credentials = New System.Net.NetworkCredential(MY_EMAIL_ADDRESS, txtPassword.Text)
objSMTPClient.Send(objMail)
Run Code Online (Sandbox Code Playgroud)
我确认objMail.Headers.Set调用实际上正在工作 - 如果我之后获得了值,它已成功更改.我的问题是,当我在TEST_EMAIL_ADDRESS的Outlook中收到电子邮件时,日期是2009年的所有地方,而不是1999年.就在Outlook界面中,也在标题中,我通过上下文中的"选项"项访问该电子邮件的菜单.
我究竟做错了什么?我有一种感觉我错过了一些明显的东西......
要明确:我不是故意这样做的.我正在开发一个电子邮件集成组件,它利用UID和"上次处理"日期来定位要集成的第一个新电子邮件.我想测试多个电子邮件具有完全相同的日期/时间的情况 - 因为电子邮件集成模块应该完美地处理这些情况.如果我可以简单地用这种方式伪造日期,我可以发送尽可能多的与特定日期/时间相匹配的电子邮件,而不是尝试使用自动脚本发送它们 - 希望它们都能在同一秒内收到.但是,我似乎需要采取另一种方法.
我在VB6 DLL中找到的方法中添加了3个可选的布尔参数.容纳它的类是MultiUse(公共),方法本身是私有的.该类实现TLB的特定接口,允许公共调用此方法.
在VB6端添加3个可选参数后,我修改了相关的C#代码,以便指定3个可选参数.它构建得很好...但是,当我尝试运行该代码时,它失败并显示以下错误消息:
找不到方法:'Boolean MyTLBName.IMyClassName.MyMethod(System.Object,System.String,Boolean,Boolean,Int32,Int32 ByRef,System.Object,System.Object,System.Object,Boolean,Boolean,Boolean)'.
请注意错误消息中是如何显示所有3个布尔参数的?看起来很好......我知道在从C#调用方法时我指定了3个布尔值.
可疑,我检查了OLEView中的MyTLBName.IMyClassName接口,并看到了这个:
[ID(0x60030000)]
HRESULT MyMethod(
//Cut out the other parameters - they are working fine.
[in, optional, defaultvalue(-1)] VARIANT_BOOL blnMyFirstOptionalBoolean,
[in, optional, defaultvalue(-1)] VARIANT_BOOL blnMySecondOptionalBoolean,
[in, optional, defaultvalue(-1)] VARIANT_BOOL blnMyThirdOptionalBoolean,
[out, retval] VARIANT_BOOL* __MIDL_0324);
Run Code Online (Sandbox Code Playgroud)
同样,3个可选参数是可见的,看起来很好.
在我看来它应该工作......但也许我错过了一些东西.
有没有什么方法可以让我无需在TLB中创建另一个版本的"MyMethod"?(使用不同的名称,并根据需要而不是可选的3个参数)
我在办公室里被称为"备用人".作为一名开发人员,我经常在项目之间来回跳转,因此我并不总是记得当我回到他们时,每个项目中确实存在哪些变化.我通常需要比较我的本地更改与源代码控制系统中的更改,然后我最终会记住这一切.事实上,我并不总是有这样做的奢侈.有时我必须快速为客户端构建一些东西,所以我备份工作目录,这样我就可以从源代码控制中获取最新文件,并快速构建DLL - 同时知道另一个(在 - 进步)变化是安全的.
问题是我现在已经在每个项目目录中累积了一堆备份文件夹,这使我更难找到我正在寻找的具体更改.虽然我的做法已经发展到我总是花时间为每个备份文件夹提供一个信息丰富的名称,但我开始认为我最好不要编写自己的工具.
例如:如果我在Windows资源管理器中选择几个文件夹,我想拥有自己的上下文菜单项来触发我自己的备份应用程序.此应用程序将提示我输入备份名称和说明.然后,它会将选定的文件夹移动到特定的集中式备份目录 - 它还会生成'readme.txt'文件,概述备份详细信息.此外,备份也将按日期/时间进行组织.我觉得这会改进我的备份程序,并促进未来的查找.
但是,我不禁想知道这些工具是否已经存在.当然,在备份方面,有人必须像我一样痴迷.
您知道有哪些工具可以帮助我改进备份吗?
我知道这篇文章,但并不完全符合我的要求.我宁愿将备份保存在同一台机器上 - 我会自己将它们移到其他机器上.
更新
澄清一下:如果我正在处理任务A,突然间我需要为客户端构建一些东西(任务B),我必须备份我到目前为止的任务A,并从源代码控制中获取最新的工作目录.然后我开始并完成任务B,然后恢复任务A.这是一个理想,整洁的场景.但有时候,我只会在一周内回到任务A,或者进一步 - 因为我遇到了任务C,任务D等等 - 所有这些都会影响到同一个项目.现在,如果计划检查这些更改,那么随着我的进展,我可能会受益于检查它们(但说实话,我们通常会等到它完成之后再检查它,在这家公司 - 这意味着更少检查未完成的代码).所以我不确定我的每个备份是否应该等于分支 - 因为我的备份有时会过多.
我正处于开发Web应用程序的早期阶段,并且我已经达到了我想要针对特定安全问题做出最佳选择的程度.目前,HTML表单中找到的所有字段都以它们所代表的数据库列命名.因此,例如,如果在数据库中我有一个名为"email"的字段,那么表单字段也将被称为"email".这使我的通用代码更容易处理表单,但我自然会看到这些名称的一个主要问题:它们可以让潜在的黑客洞察我的数据库的结构,只是从查看源代码.
我想到的主要解决方案涉及加密字段名称,以便客户端永远不会有真正的名称.服务器端密钥将用于进行加密.但是,我担心这种方法可能会使事情变得太复杂.例如:
所以,我想知道你们对此的看法.我是在过度思考,还是我走在正确的轨道上?有没有更好的方法来处理它?
顺便说一句,我也知道像"电子邮件"这样的字段名称并没有向开发人员提供太多信息(为什么不提供txtEmail,或类似的东西?).我想看看是否有一个很好的命名约定我可以采用,因为它可能有助于解决上述问题.
自定义操作配置如下:
自定义操作名称:MyCustomAction
VBScript文件名:
<PathVar01>\MyFolder\MyVBSfile.vbsScriptFunction:MyFunction
返回处理:同步(检查退出代码)
脚本执行:立即执行
它通过以下InstallScript代码执行:
result = MsiDoAction(ISMSI_HANDLE,"MyCustomAction");
Run Code Online (Sandbox Code Playgroud)
当安装程序在InstallScript中到达该行时,安装程序会显示错误警告,说明:
"错误1720.此Windows Installer程序包存在问题.无法运行此安装所需的脚本.请与您的支持人员或程序包供应商联系."
MsiDoAction返回的结果代码是'1603',根据winerror.h,它是:
//
// MessageId: ERROR_INSTALL_FAILURE
//
// MessageText:
//
// Fatal error during installation.
//
#define ERROR_INSTALL_FAILURE 1603L
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我开始怀疑文件是否正确包含在内.然而,我指向正确的文件,我已经尝试通过InstallShield支持文件包含VBS,认为这将确保文件与设置一起出现,但结果相同.